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

2020-08-08 11:58:59 +08:00
 xuanbg
这两个典型的月经问题,本质上是一个眼界问题。

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

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

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

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

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

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

如果通过 http status 返回业务的错误状态,那么回来一个 404,那到底是服务 /接口不存在,还是 id 不存在取不到数据呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/696668

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX