V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuanbg
V2EX  ›  程序员

用 session 还是用 token? rest api 发生业务错误时返回的 http status 应该是 200 还是 4xx/5xx?

  •  
  •   xuanbg ·
    xuanbg · 2020-08-08 11:58:59 +08:00 · 1042 次点击
    这是一个创建于 1349 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这两个典型的月经问题,本质上是一个眼界问题。

    为什么要用 token 替代 session ?最根本的原因是 session 不支持多端。技术负责人在做技术规划和选型的时候,肯定要考虑多端的问题。但咱们很多只做 web 开发的前端同学是不需要考虑这个的,觉得用 token 完全没有必要也就理所当然了。

    为什么 rest api 发生业务错误时,大多返回的 http status 是 200 ?同样也是多端的问题。做 web 开发的同学可以试着问一下做移动 APP 开发的同学,或者是做服务端开发的同学,http(s)协议对他们来说是个什么东西?他们会不会关心 http status ?从我作为服务端开发人员的角度来说,http(s)协议就是个数据传输协议,正常情况下它必须是 200 。200 的时候出了问题是我的 bug,不是 200 的话就不是我开发的问题,你该去找运维。

    提出这个问题,我的目的是希望做 web 开发的同学可以拓宽一些眼界。跳出自己的圈子看问题,才能发现问题的本质。
    Zhuzhuchenyan
        1
    Zhuzhuchenyan  
       2020-08-08 16:06:12 +08:00
    单说第二部关于 HTTP 状态码的。

    如何判断正常的情况,看你的行文中的意思是正常情况还涵盖了发生业务错误的情况?那请问以下几种常见的业务错误情况应该如何考虑,难道是返回值给 200,然后维护一个错误详情的字段?

    - 前端在一个本该是 utc 格式的日期字段中传了一个不受支持的日期格式
    - 前端给一个不该空的字段中传了一个空值
    - 前端传了一个不存在的用户 ID 导致后端处理请求时丢了一个异常
    此处又分两种情况 1.异常被成功捕获 2.异常没有被捕获
    - 前端传了一个非法的用户 token

    另外很好奇,运维如何能在业务不正常的时候影响到 HTTP 的状态码。
    xuanbg
        2
    xuanbg  
    OP
       2020-08-08 16:55:53 +08:00
    @Zhuzhuchenyan 譬如服务挂了,就会 501 呀。服务本身不正常或不可访问就不会返回 200 。

    如果通过 http status 返回业务的错误状态,那么回来一个 404,那到底是服务 /接口不存在,还是 id 不存在取不到数据呢?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1206 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:09 · PVG 02:09 · LAX 11:09 · JFK 14:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.