api 接口 http 响应码问题?

2019-11-11 11:12:30 +08:00
 Zach369

2018 年 新项目 开始使用 restful 风格接口. 所有的返回 遵循 HTTP 响应码. 结果 很不理想,不管是 web 还是客户端,亦或者安卓和 ios. 都很反对这种开发模式. 但是楼主还是坚持了下来.

目前又有一个跟外包配合的项目. 外包那边提出 所有的接口 必须是 200.

返回格式必须是:

{
    "code": 0,        //0 位正常,其他则为异常.
    "result": "",
    "msg": "报错信息"
}

想问下 各位大佬现在是怎么使用的那?

8087 次点击
所在节点    程序员
70 条回复
chanchan
2019-11-11 12:49:14 +08:00
反正我觉得 http status 不是用来描述业务的
binux
2019-11-11 12:53:28 +08:00
我现在觉得国内这个状况就是能力问题。
大部分人连 HTTP 状态码是什么,有哪些都搞不明白,你让他们处理非 200 自然是不行的。

无论在英国还是美国,和别的开发者交流,按照语义返回状态码都是理所应当的。如果你说统统返回 200,他们还会问为什么。
yulitian888
2019-11-11 13:02:51 +08:00
这个视情况而定的。
如果终端是服务器调用的话,两者皆可,自行约定就行。但是如果终端是浏览器的话,你用 http 的 4xx,5xx 返回,信不信有浏览器厂家给你夹带私货、偷梁换柱?比如某些国产套壳浏览器遇到 404,会重定向到浏览器自带的 404,页面里面还给顺手加点广告。
IceBay
2019-11-11 13:06:07 +08:00
@yulitian888 #23 application/json 也会这样吗?
back0893
2019-11-11 13:07:46 +08:00
战起来
上次战了几百贴
reus
2019-11-11 13:10:59 +08:00
@binux 他们又没有被“智能路由”、“智能浏览器”劫持非 200 返回的历史……
whp1473
2019-11-11 13:25:51 +08:00
最大问题是 Http 的 Code 码是 3** 4** 2**都是有规定含义的,浏览器表现也不同,用这个一些自定义的返回很难说明。前后去过的两家公司都是统一返回 200,内部状态码判断 msg 说明错误描述 value 返回值
KuroNekoFan
2019-11-11 13:31:13 +08:00
随便吧,不正常的 status 和 data.code 都 reject 掉就完事了
warcraft1236
2019-11-11 13:32:06 +08:00
@binux 3xx 4xx 5xx 是给 nginx 返回的,服务端的程序只要能返回数据,就说明 http 200,错误都是服务端程序自己定义的错误,很多都是业务上的错误。比如自己写的业务代码也反 500,那就不够直观的判断是 nginx 返回 500 还是程序返回 500。所以要求程序全都反 200 的 http status,其他的东西都放到 response body 里边自己去判断
Lonersun
2019-11-11 13:44:23 +08:00
我们是这样搞得:
200 定义请求成功,
400 定义业务异常,再进行业务细分,返回具体的错误码及错误信息
500 定义服务异常,
binux
2019-11-11 13:48:57 +08:00
@warcraft1236 #29 你连判断 Nginx 还是程序的错误都做不到吗?
jonahtan
2019-11-11 13:58:14 +08:00
200 查询成功(GET)
201 操作成功(POST/PUT/DELETE)
400 业务处理异常
401 鉴权失败
404not found
500 服务处理异常

具体的业务错误代码放在 response 的 code 里面。
realpg
2019-11-11 13:58:25 +08:00
习惯 1 0 和负数表示法

不定义为 code 因为用 code 隐含的意思是 0 正常

定义为 status

1 为通常状态正常
0 为非业务逻辑状态非正常
负数为各种针对每个业务的错误代码
dcty
2019-11-11 14:02:05 +08:00
谁给钱谁说了算
warcraft1236
2019-11-11 14:03:31 +08:00
@binux 注意,是方便两个字,要的是快速。你要是抬杠那就没意思了。写代码还能用记事本呢,还不需要任何代码提示呢
warcraft1236
2019-11-11 14:04:55 +08:00
@binux 另外,为什么国外的程序员觉得直接用 http status,就代表是对的?
fkdog
2019-11-11 14:11:31 +08:00
我来总结一下,

整天嘴上挂着 restful 的基本都是那种刚毕业没几年充满了理想主义,然后在小公司混迹的,工作量太少吃饱了没事干整天把 restful 当成圣经一样供奉着。

小公司增删改查没多大复杂业务的,妄想几个 http code 来解决业务需求,脑子烧坏了把。
bfqymmt
2019-11-11 14:20:59 +08:00
@back0893 有上次的大战贴吗?学习一下
telami
2019-11-11 16:16:11 +08:00
非常认同 rest 中关于 url 是资源定位符的概念,增删改查对应 post、delete、put、get,但是返回 http 状态码简直就是灾难,联调时返回 404,已经无法辨认是不存在这个接口,还是不存在 [user/1] id 为 1 的人
jabin88
2019-11-11 16:27:24 +08:00
遵循 HTTP 响应码 这样最好。我见过很多合作公司的文档都这样

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

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

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

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

© 2021 V2EX