API 不管操作成功还是失败都返回 200 状态码,自己在返回结果里又定义一个表示是否成功的属性是从哪里传开的坏习惯?

2022-12-03 21:22:25 +08:00
 edis0n0
一直以为是从阿里开始传到整个中国互联网企业的坏习惯,最近发现一些日本网站也都这样做。但欧美网站大部分不这样做,例如 stripe ( https://stripe.com/docs/api/errors) twitter 等,都是规范的使用 http 状态码表示操作成功或失败,但 google 一些没有公开文档的私有 api 返回状态也非常混乱
8372 次点击
所在节点    程序员
93 条回复
dddd1919
2022-12-04 09:24:43 +08:00
@edis0n0 httpClient ,okhttp ,以及 springboot 里常用的 feign ,当然可以写回调处理非 200

这些不是重点,重点是用 http code 很难满足在异构系统下完成比较通用的业务表达,况且团队间能力参差不齐,制定统一的消息结构规范避免大家在不同传输协议上做过多纠结
xuanbg
2022-12-04 09:27:02 +08:00
@eason1874 什么年代了,还运维打业务日志。。。ELK 搞一套业务的,一套运维的不香吗?
shakoon
2022-12-04 09:33:17 +08:00
但凡对 OSI 七层模型有一点了解,也不至于会纠结这个问题。所以基本上也能快速分辨出哪些是科班出身的人。
ByteChen
2022-12-04 09:34:24 +08:00
edis0n0
2022-12-04 10:26:06 +08:00
@shakoon #63 照你这么说 stripe twitter 的程序员全都不是科班出身的吗
k9982874
2022-12-04 10:28:43 +08:00
你猜它为什么叫 http status code 而不叫 api status code 呢?
看着两个东西长得差不多就搁这硬套,硬套不要紧,还跑出来秀智商。
LawlietZ
2022-12-04 11:04:41 +08:00
@edis0n0 你现在没有完全的论据证明 stripe twitter 完全是你想的那样的。。。有渠道的话建议你先问问 stripe twitter 内部真正的程序猿再说。。。。
ccppgo
2022-12-04 13:03:41 +08:00
别人的应用代码你都要专门批判一番, 恶臭爹味了
bugfan
2022-12-04 13:44:12 +08:00
我在做后端新项目时候,也在想该用 200 包所有自定义的东西呢,还是用 restful 风格来做呢,最后选择用了 restful ,事实证明,光用 restful 远远不够判断业务逻辑的情况,我最后在 2xx 的所有请求里面,自定义的一套状态状态码😂
6ugman
2022-12-04 13:48:46 +08:00
全用 200 不是没啥经验就是懒,用了 http code 就不能用自己业务状态码吗?懒是可以理解,鼓吹就算了,大家还是多遵守规范的好
fakeshadow
2022-12-04 14:40:45 +08:00
http 套 rpc 是很好的选择,看 grpc 多流行,没必要片面的否定。
zr8657
2022-12-04 15:08:16 +08:00
说起这个最近调电信的 5G 平台 api ,结果电信硬是自己编了个 799 的 http 状态码,搞得我封装的好好的代码为了它单独加了一坨处理,真服了
sprite82
2022-12-04 16:00:48 +08:00
http 状态是传输层状态,反映网络问题,谁知道是不是中间商给拦截了还是用户路由器问题?如果是内部 rpc 调用,我觉得这么搞没什么问题,但也要看状态码能否适应业务复杂度。
ljzxloaf
2022-12-04 16:18:53 +08:00
http status code 是与业务无关的,业务相关的 status 还是需要通过报文返回,所以我们讨论的其实是业务无关给状态应该如何返回。其实用啥都可以,但是如果用 http status code 的话会增加一些沟通成本和程序员的心智负担,因为要学习和沟通两套 code 。我觉得能 All in one 都尽量 all in one ,看看现在企业的各种平台不都是能集成在一起的都集成在一起了,多转个圈就多了一分成本。

而且现在有些公司用 http 是对外的 web 接口,有些公司则直接用 http 作为 rpc ,后者如果为了以后升级方便,应该尽量不要依赖 http status code ,http 仅作为传输层使用。
hlayk
2022-12-04 16:45:41 +08:00
https://tanronggui.xyz/t/808610 之前也讨论这个问题
alamaya
2022-12-04 17:57:36 +08:00
什么 http 原教旨主义
zealinux
2022-12-04 18:45:02 +08:00
使用 JMeter 进行压测的时候,全是 200 成功,其实打开后发现大多数多数其实是错的。
vagusss
2022-12-04 20:02:14 +08:00
争来争去,谁也说服不了另一方,我觉得只要有规范约定清楚,用啥都行,个人更倾向于 200+post+json+code
zsdroid
2022-12-04 21:00:18 +08:00
发现 op 非常偏激。twitter 这些国外平台用的一定是对的。国内不是这么用的一定是错了。
janus77
2022-12-04 21:06:41 +08:00
200 是状态码,不是结果码……连接是正常返回就可以叫做状态 200 ,至于结果,那可复杂多了

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

https://tanronggui.xyz/t/899875

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

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

© 2021 V2EX