api 接口 http 响应码问题?

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

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

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

返回格式必须是:

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

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

8097 次点击
所在节点    程序员
70 条回复
KyonLi
2019-11-11 16:45:16 +08:00
caryqy
2019-11-11 17:22:32 +08:00
http code 那几个不够用啊

文档写好就行,每个 code 对应的什么含义
xuanbg
2019-11-11 17:31:09 +08:00
这种封装结构其实是 OSI 模型分层思想的体现。http 协议在 OSI 模型中对应的是第 4、5、6 三层,webAPI 对应的是第 7 层。高层的应用当然不需要也不应该去干涉更低层的逻辑。
xuanbg
2019-11-11 17:36:48 +08:00
原教旨主义的 REST 实际上混淆了应用和数据传输,违反了分层的思想。导致了更高的耦合度和逻辑的复杂化,在我看来是不可取的。

另外,搭车问一个问题:验证短信验证码的 url 该如何定义?该使用何种请求方法?
yulitian888
2019-11-11 21:18:21 +08:00
@IceBay 以前遇到的,但是没注意当时 Content-Type 是什么
lihongjie0209
2019-11-11 21:53:03 +08:00
随便在聚合数据上找了一个, 你用 http code 定义以下这些错误代码。https://www.juhe.cn/docs/api/id/54

还有, 一个协议层的 code 居然会和业务关联, 如果以后需要使用 tcp 模式的 rpc 调用, 你到哪里去找 http code ?
gamexg
2019-11-11 22:30:12 +08:00
@lcy630409 #6 0 为正常的好处是 其他值可以作为错误代码提供更详细的错误信息。

另外 http 的那几个错误代码根本不够用。
Tokin
2019-11-11 23:06:47 +08:00
@gamexg 应该是用 http 状态码归类吧,具体错误和错误代码还是要在主体中返回。
我用了一段时间 http 状态码,一直难以适应。
ryougifujino
2019-11-11 23:58:53 +08:00
看了之前那个讨论贴,总结一下个人感觉最好的:所有 http code 还是按正常语义返回。正常情况下直接返回数据,不包一层。在有错误的情况下,如果有必要对话,在 response body 里面定义更详细错误码。
oneisall8955
2019-11-12 00:10:16 +08:00
我又看了上次 300+回帖打架起来的帖子,继续战起来战起来🤺
ggicci
2019-11-12 01:25:02 +08:00
不要问,问就是 RESTful 和 GraphQL
nvkou
2019-11-12 01:59:33 +08:00
@fkdog 几个?没说不准自定义啊。code 250:查询成功,但服务器闹脾气了,回滚了操作。
nvkou
2019-11-12 02:01:31 +08:00
@lihongjie0209 教条主义:restful 只用 http ( s )
whileFalse
2019-11-12 07:06:39 +08:00
body 按 JSON 风格,code=0 为正常。
HTTP status code 按语义。
协议走 HTTPS。以前有的运营商会劫持非 200 返回,现在不清楚。
API 使用者只要按 JSON 解码并查看 code 即可。如果 JSON 解码失败说明服务器不正常。
HTTP status code 用来进行具体业务无关的宏观统计。比如监控 5xx 的发生率等等。status code 没必要分的特别细致。
alphatoad
2019-11-12 07:49:27 +08:00
GraphQL 天下第一
zr8657
2019-11-12 07:50:46 +08:00
月经贴别战了,甲方说啥干啥呗,混口饭吃得了,有那功夫纠结不如去干点自己喜欢的事
vultr
2019-11-12 08:31:19 +08:00
@Lonersun #30 我们也是这样子处理的。
killerv
2019-11-12 09:36:38 +08:00
http 状态码按照实际业务来返回,不要全部都是 200,不过 body 中还是要指明 errCode,HTTP 状态码无法具体表达各种错误场景。
——————————————————————
但是实际工作中会有个问题,很多人觉得非 200 的 http 状态码就是服务端问题,他觉得这完全是服务端的 error。。。
pb941129
2019-11-12 09:38:46 +08:00
这个 看情况吧
比如用户在未登录状态下请求访问某需要登录的接口 那当然返回 http 状态码 403 更合适
但是如果是接口本身没有某项数据 用户有权调用该接口 那就最好返回 200 状态 说明接口访问性没问题 error code 写在 json 中 表明数据有问题
所以我倾向于 http 状态码用来表示接口可访问性 error code 用来表示结果数据正确性
daguaochengtang
2019-11-12 09:54:52 +08:00
不知道六字真言在这里是否适用?

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

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

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

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

© 2021 V2EX