接口到底完全遵守 restful,用 HTTP Status 来返回状态码好,还是用 json 返回 code 更好

2016-12-02 14:22:08 +08:00
 m939594960

个人不是很喜欢用 HTTP Status 来返回状态码。 有几点原因:

1.JS 判断起状态码来相对还是比较麻烦的

2.HTTP Status 主要几个状态码还行,其他的状态码感觉并不是很清晰

3.经常遇到网络有问题的时候返回 200 但是 body 里是空值的时候


而且个人感觉用 HTTP Status 来返回状态码 并没有感觉到什么方便 /舒服的地方

不知道大家怎么看呢,应该用哪种方式呢?

11206 次点击
所在节点    问与答
18 条回复
abelyao
2016-12-02 14:49:35 +08:00
这一两个月以来 V2 上至少两个帖子讨论这个问题了
m939594960
2016-12-02 14:50:42 +08:00
@abelyao 哈哈 但是都没有很明确的结果,还是想来问问。
abelyao
2016-12-02 14:52:45 +08:00
@m939594960 有什么区别,照样还是各抒己见
hellommd
2016-12-02 14:52:52 +08:00
这个本来就是没有结果的问题,符合内部使用要求即可。
wdrsam
2016-12-02 15:13:24 +08:00
各有各的要求。反正我们公司的前端经常抱怨我们的 api ,明明这个动作的(例如更新一个字段)执行失败了,你就直接 message 那返回 false ,为啥还个字段写个 false , message 那是 true ?我说,那个 true 证明你请求成功了。。 2 个东西表达意思不一样呢
EXE
2016-12-02 15:20:14 +08:00
我一直都是使用的后者,天朝这种网络环境下,返回个非 200 的响应指不定运营商给你劫持到什么页面
kernelreload
2016-12-02 15:23:06 +08:00
有的时候明明错误了,我们伟大的天朝运营商还是会给你返回完美 200 还附送广告一幅。
jarlyyn
2016-12-02 15:24:55 +08:00
1.如果用 jquery,用状态码判断是最简单的。直接 ajaxsetup 。
2.目前的网络环境,已经不用考虑劫持了。直接上 Https 吧。
Felldeadbird
2016-12-02 16:03:27 +08:00
我觉得你应该和对接的人说,而不是到网上问。
即使大家给了你建议,但内部得看法和大家的建议不一致时怎么办呢?
learnshare
2016-12-02 16:09:14 +08:00
状态码有其统一的定义,自定义错误可以增加更多可用信息

@EXE
@jarlyyn
不知道这个劫持的问题是谁给的经验,什么时候、什么情况下得出的。真正遇到的有多少呢?
baiyi
2016-12-02 16:14:40 +08:00
感觉这个问题要比得上'php 是最好的语言'了

我会用 HTTP 状态吗返回

@learnshare 在好多这个问题的帖子里都看到你了
baiyi
2016-12-02 16:15:14 +08:00
@baiyi 吗->码
learnshare
2016-12-02 16:34:36 +08:00
@baiyi 都是闲逛的人 >_<
phpcxy
2016-12-02 16:38:08 +08:00
都没所谓,看调用接口的人需求!
xhat
2016-12-02 16:52:42 +08:00
一个严肃的工程思维不应该用状态码

状态码在本质上不属于业务逻辑范畴
不能把服务器响应状态和业务逻辑返回值混为一谈

举个简单例子:
在发起支付时,要判断支付的几种状态:提交失败、提交成功但支付失败、提交成功且支付成功。
只用 200 显然不能解决这种业务逻辑。如果为每个动作赋予一个状态码苟且解决,就完全失去状态码的意义了。

这或许就是程序员和工程师的区别,之一吧
jarlyyn
2016-12-02 17:04:02 +08:00
@learnshare

我遇到过。之前很厉害,现在好了很多。
而且现在应该也只劫持 404/403 了。
jarlyyn
2016-12-02 17:08:01 +08:00
@xhat

个人理解,要以严肃来说,必须用状态码。

状态码表示的是 http 状态的错误。

典型如 404/403/401

4 系列错误本身就是指客户端错误,客户端应该确认正确后再重新发送。

返回的错误码表示业务的错误。

最典型的区别,这会影响到 Http 服务器,浏览器 /客户端的缓存逻辑。
shsf4
2016-12-03 00:27:23 +08:00
应该结合两种来使用~
使用常见的状态码,至少 200 , 404 , 301 这些都要用到吧
业务类型的 code 也需要,你看微信接口那么多种类型的 code

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

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

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

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

© 2021 V2EX