2018 年 新项目 开始使用 restful 风格接口. 所有的返回 遵循 HTTP 响应码. 结果 很不理想,不管是 web 还是客户端,亦或者安卓和 ios. 都很反对这种开发模式. 但是楼主还是坚持了下来.
目前又有一个跟外包配合的项目. 外包那边提出 所有的接口 必须是 200.
返回格式必须是:
{
"code": 0, //0 位正常,其他则为异常.
"result": "",
"msg": "报错信息"
}
想问下 各位大佬现在是怎么使用的那?
1
wunonglin 2019-11-11 11:16:35 +08:00
月经贴
|
2
lcy630409 2019-11-11 11:18:28 +08:00
- - ,各位来吧
我赞同 code 等于状态 大概是用 thinkphp 习惯了 |
3
pelloz 2019-11-11 11:18:42 +08:00
不要教条,哪种方便用哪种,混着用最方便
|
4
TomVista 2019-11-11 11:19:06 +08:00
这个无所谓,写好文档,定义好格式,就够了.
|
5
fengpan567 2019-11-11 11:19:48 +08:00
格式没问题,三部分都有。但是错误码还得根据自己的业务来,我自己设计接口也不会把 200 当成成功返回值。
|
6
lcy630409 2019-11-11 11:20:01 +08:00 2
之前和一个 windows 软件开发的同事对接过,
他们也是喜欢 code=1 是错误,0 是正常, 我就喜欢 code=1 正常 0 错误..... |
7
Raymon111111 2019-11-11 11:22:46 +08:00
0 表明正常, 其它表示异常.
实现的又不是 http 协议, 用 http 协议的规范是有点奇怪的. |
9
Smilencer 2019-11-11 11:23:55 +08:00 via iPhone
随意
|
10
zhuweiyou 2019-11-11 11:26:40 +08:00
因为这个 code 你要理解成 error code,所以 0 是正常,才是对的。
|
11
zqguo 2019-11-11 11:28:01 +08:00
问题不大啊,规范好就行了,没啥纠结的。
|
12
HangoX 2019-11-11 11:28:20 +08:00
我不明白的地方是,如果用 http 状态码表示的话,反正我都要解析内容,那我干嘛还要管 http 状态码?
|
13
baiyi 2019-11-11 11:31:07 +08:00 2
快成周经贴了
我支持响应部分 HTTP status code,成功时 "code:0" 完全没有必要,直接返回数据 |
14
wangkun025 2019-11-11 11:31:55 +08:00
我用状态码
|
15
Hopetree 2019-11-11 11:32:19 +08:00
他们要所有接口都返回 200 应该是考虑的前后端分离,现在前后端分离的话,按照这种返回格式给前端去判断其实也挺好的,所以说两种方式没有哪种更好,看需求,怎么好用怎么来呗
|
16
wangyzj 2019-11-11 11:34:00 +08:00
0 位正常,其他则为异常.
我现在就是这样 |
17
dallaslu 2019-11-11 11:57:32 +08:00
把整个 HTTP Header 都在 JSON 里写一遍,爱用哪个用哪个。
|
18
rogwan 2019-11-11 11:57:37 +08:00 via iPhone
code = 0 是有 sub_code 的含义,用于标注业务状态
|
19
kwanzaa 2019-11-11 12:02:08 +08:00
没问题,但是要写好文档。400/500/等异常处理要很明确协定。
抛个 http code 就不管的人都是憨憨。 |
20
riverluoo 2019-11-11 12:46:21 +08:00
双方约定好 就好了
|
21
chanchan 2019-11-11 12:49:14 +08:00
反正我觉得 http status 不是用来描述业务的
|
22
binux 2019-11-11 12:53:28 +08:00 via Android 4
我现在觉得国内这个状况就是能力问题。
大部分人连 HTTP 状态码是什么,有哪些都搞不明白,你让他们处理非 200 自然是不行的。 无论在英国还是美国,和别的开发者交流,按照语义返回状态码都是理所应当的。如果你说统统返回 200,他们还会问为什么。 |
23
yulitian888 2019-11-11 13:02:51 +08:00 4
这个视情况而定的。
如果终端是服务器调用的话,两者皆可,自行约定就行。但是如果终端是浏览器的话,你用 http 的 4xx,5xx 返回,信不信有浏览器厂家给你夹带私货、偷梁换柱?比如某些国产套壳浏览器遇到 404,会重定向到浏览器自带的 404,页面里面还给顺手加点广告。 |
24
IceBay 2019-11-11 13:06:07 +08:00
@yulitian888 #23 application/json 也会这样吗?
|
25
back0893 2019-11-11 13:07:46 +08:00
战起来
上次战了几百贴 |
27
whp1473 2019-11-11 13:25:51 +08:00
最大问题是 Http 的 Code 码是 3** 4** 2**都是有规定含义的,浏览器表现也不同,用这个一些自定义的返回很难说明。前后去过的两家公司都是统一返回 200,内部状态码判断 msg 说明错误描述 value 返回值
|
28
KuroNekoFan 2019-11-11 13:31:13 +08:00 via iPhone
随便吧,不正常的 status 和 data.code 都 reject 掉就完事了
|
29
warcraft1236 2019-11-11 13:32:06 +08:00 1
@binux 3xx 4xx 5xx 是给 nginx 返回的,服务端的程序只要能返回数据,就说明 http 200,错误都是服务端程序自己定义的错误,很多都是业务上的错误。比如自己写的业务代码也反 500,那就不够直观的判断是 nginx 返回 500 还是程序返回 500。所以要求程序全都反 200 的 http status,其他的东西都放到 response body 里边自己去判断
|
30
Lonersun 2019-11-11 13:44:23 +08:00 1
我们是这样搞得:
200 定义请求成功, 400 定义业务异常,再进行业务细分,返回具体的错误码及错误信息 500 定义服务异常, |
31
binux 2019-11-11 13:48:57 +08:00 via Android
@warcraft1236 #29 你连判断 Nginx 还是程序的错误都做不到吗?
|
32
jonahtan 2019-11-11 13:58:14 +08:00
200 查询成功(GET)
201 操作成功(POST/PUT/DELETE) 400 业务处理异常 401 鉴权失败 404not found 500 服务处理异常 具体的业务错误代码放在 response 的 code 里面。 |
33
realpg 2019-11-11 13:58:25 +08:00
习惯 1 0 和负数表示法
不定义为 code 因为用 code 隐含的意思是 0 正常 定义为 status 1 为通常状态正常 0 为非业务逻辑状态非正常 负数为各种针对每个业务的错误代码 |
34
dcty 2019-11-11 14:02:05 +08:00
谁给钱谁说了算
|
35
warcraft1236 2019-11-11 14:03:31 +08:00
@binux 注意,是方便两个字,要的是快速。你要是抬杠那就没意思了。写代码还能用记事本呢,还不需要任何代码提示呢
|
36
warcraft1236 2019-11-11 14:04:55 +08:00
@binux 另外,为什么国外的程序员觉得直接用 http status,就代表是对的?
|
37
fkdog 2019-11-11 14:11:31 +08:00 2
我来总结一下,
整天嘴上挂着 restful 的基本都是那种刚毕业没几年充满了理想主义,然后在小公司混迹的,工作量太少吃饱了没事干整天把 restful 当成圣经一样供奉着。 小公司增删改查没多大复杂业务的,妄想几个 http code 来解决业务需求,脑子烧坏了把。 |
39
telami 2019-11-11 16:16:11 +08:00 1
非常认同 rest 中关于 url 是资源定位符的概念,增删改查对应 post、delete、put、get,但是返回 http 状态码简直就是灾难,联调时返回 404,已经无法辨认是不存在这个接口,还是不存在 [user/1] id 为 1 的人
|
40
jabin88 2019-11-11 16:27:24 +08:00 1
遵循 HTTP 响应码 这样最好。我见过很多合作公司的文档都这样
|
41
KyonLi 2019-11-11 16:45:16 +08:00 3
|
42
caryqy 2019-11-11 17:22:32 +08:00 1
http code 那几个不够用啊
文档写好就行,每个 code 对应的什么含义 |
43
xuanbg 2019-11-11 17:31:09 +08:00
这种封装结构其实是 OSI 模型分层思想的体现。http 协议在 OSI 模型中对应的是第 4、5、6 三层,webAPI 对应的是第 7 层。高层的应用当然不需要也不应该去干涉更低层的逻辑。
|
44
xuanbg 2019-11-11 17:36:48 +08:00
原教旨主义的 REST 实际上混淆了应用和数据传输,违反了分层的思想。导致了更高的耦合度和逻辑的复杂化,在我看来是不可取的。
另外,搭车问一个问题:验证短信验证码的 url 该如何定义?该使用何种请求方法? |
45
yulitian888 2019-11-11 21:18:21 +08:00
@IceBay 以前遇到的,但是没注意当时 Content-Type 是什么
|
46
lihongjie0209 2019-11-11 21:53:03 +08:00 1
随便在聚合数据上找了一个, 你用 http code 定义以下这些错误代码。https://www.juhe.cn/docs/api/id/54
还有, 一个协议层的 code 居然会和业务关联, 如果以后需要使用 tcp 模式的 rpc 调用, 你到哪里去找 http code ? |
47
gamexg 2019-11-11 22:30:12 +08:00
|
48
Tokin 2019-11-11 23:06:47 +08:00
@gamexg 应该是用 http 状态码归类吧,具体错误和错误代码还是要在主体中返回。
我用了一段时间 http 状态码,一直难以适应。 |
49
ryougifujino 2019-11-11 23:58:53 +08:00 2
看了之前那个讨论贴,总结一下个人感觉最好的:所有 http code 还是按正常语义返回。正常情况下直接返回数据,不包一层。在有错误的情况下,如果有必要对话,在 response body 里面定义更详细错误码。
|
50
oneisall8955 2019-11-12 00:10:16 +08:00 via Android
我又看了上次 300+回帖打架起来的帖子,继续战起来战起来🤺
|
51
ggicci 2019-11-12 01:25:02 +08:00
不要问,问就是 RESTful 和 GraphQL
|
53
nvkou 2019-11-12 02:01:31 +08:00 via Android
@lihongjie0209 教条主义:restful 只用 http ( s )
|
54
whileFalse 2019-11-12 07:06:39 +08:00 via iPhone 1
body 按 JSON 风格,code=0 为正常。
HTTP status code 按语义。 协议走 HTTPS。以前有的运营商会劫持非 200 返回,现在不清楚。 API 使用者只要按 JSON 解码并查看 code 即可。如果 JSON 解码失败说明服务器不正常。 HTTP status code 用来进行具体业务无关的宏观统计。比如监控 5xx 的发生率等等。status code 没必要分的特别细致。 |
55
alphatoad 2019-11-12 07:49:27 +08:00
GraphQL 天下第一
|
56
zr8657 2019-11-12 07:50:46 +08:00 via Android
月经贴别战了,甲方说啥干啥呗,混口饭吃得了,有那功夫纠结不如去干点自己喜欢的事
|
58
killerv 2019-11-12 09:36:38 +08:00
http 状态码按照实际业务来返回,不要全部都是 200,不过 body 中还是要指明 errCode,HTTP 状态码无法具体表达各种错误场景。
—————————————————————— 但是实际工作中会有个问题,很多人觉得非 200 的 http 状态码就是服务端问题,他觉得这完全是服务端的 error。。。 |
59
pb941129 2019-11-12 09:38:46 +08:00
这个 看情况吧
比如用户在未登录状态下请求访问某需要登录的接口 那当然返回 http 状态码 403 更合适 但是如果是接口本身没有某项数据 用户有权调用该接口 那就最好返回 200 状态 说明接口访问性没问题 error code 写在 json 中 表明数据有问题 所以我倾向于 http 状态码用来表示接口可访问性 error code 用来表示结果数据正确性 |
60
daguaochengtang 2019-11-12 09:54:52 +08:00
不知道六字真言在这里是否适用?
|
61
grzhan 2019-11-12 10:20:49 +08:00
之前为公司制定过 HTTP API 标准,所以那时候看了不少其他公司的方案,不过多数是海外的公司,微软、Google、Github、Paypal、Zalendo 等等。
我想知道国内有哪些公司的公开 API 标准不管错误还是正确都是以 200 状态码返回的,有相关资料吗? |
62
11ssss 2019-11-12 10:27:47 +08:00
首先说 http 状态码不是描述业务的 ,我同意.
其次表达个人观点, http 状态码本身就是描述服务状态的 看到有人说直接返回 4xx/5xx 是憨憨 或 xxx 的 我只想说 你有代码规范吗?你有技术追求吗? http 状态码才是规范的 通用以及最好对接的方式. 至于业务代码合理的使用方式是在你 4xx/5xx 的时候,包含在你的 payload 里的. |
63
bearxu 2019-11-12 10:41:33 +08:00
必须是 200 的原因主要是 有段时间很多 isp 都会劫持大于 400 的响应插入广告
不过这年头都是 https 了,没那么容易劫持了吧? |
64
skiy 2019-11-12 10:49:21 +08:00
网页状态码太少了,不足以表达所有的意思。
不过我现在是业务代码跟网页状态码组合起来用。我其实不喜欢只用网页状态 |
65
vibbow 2019-11-12 12:45:54 +08:00
200 + Code 的路过
|
66
metrxqin 2019-11-12 13:51:26 +08:00
刚巧前些时间发内部邮件讨论新的服务端响应代码格式,供大家参考:
[![snipaste-20191112-134509.png]( https://i.postimg.cc/9QD4wmGm/snipaste-20191112-134509.png)]( https://postimg.cc/zy1D91t6) |
67
arnoldxiao 2019-11-12 14:13:50 +08:00
code=0 是正常,其他则异常
|
68
katsusan 2019-11-12 14:29:46 +08:00 2
|
69
liuzhiyong 2019-11-12 22:37:21 +08:00
既然“都很反对”,那就不要固执了。这东西灵活处理,没关系啦。
|
70
Zach369 OP 感谢大家的意见.我最近琢磨了下... 我绝对灵活点.... 想怎么用就怎么用..
|