为了账号安全,请及时绑定邮箱和手机立即绑定

RESTful api 如果数据不存在时应该返回200还是404?

RESTful api 如果数据不存在时应该返回200还是404?

PHP
喵喔喔 2019-03-07 03:49:19
场景获取用户聊天信息 : GET /messages?user=1如果该用户没有聊天记录,那返回数据时应该返回200的空值还是404不存在? 200成功 { "status": 200 #HTTP状态码 "message": "ok" "data" : [] } 404错误 { "status":404 #HTTP状态码 "message":"数据不存在" "error_code":1000 } 2018/12/4更新:参考了豆瓣和GitHub的似乎这两种都有用豆瓣:https://api.douban.com/v2/boo...获取不到图书时返回404 GitHub:https://api.github.com/search...:Ruan Yifeng3
查看完整描述

10 回答

?
小趴菜木木

TA贡献3条经验 获得超1个赞

我觉得如果是数据不存在,状态码(http status)返回200要好一些。因为如果返回404则有点觉得这个接口不存在,而不是数据不存在。然后消息体再来说明数据找不到,比如:

//img1.sycdn.imooc.com//5dbaaae90001c21103470105.jpg

而真正找不到接口、页面,则由服务自己就抛出了404异常(当然你可以去捕获,然后稍作处理)

查看完整回答
1 反对 回复 2019-10-31
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

404(未找到),『未找到』代表的不是没有找到数据,而是代表服务器找不到请求的链接、网页或是文件。

查看完整回答
反对 回复 2019-03-18
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

最好是返回200的空值。因为如果传404会出现 分不清是找不到接口 还是 该用户没有聊天记录 的情况。

查看完整回答
反对 回复 2019-03-18
?
慕森卡

TA贡献1806条经验 获得超8个赞

肯定返回200啊,你返回404前端有可能误以为是接口问题

查看完整回答
反对 回复 2019-03-18
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

建议不要返回404,因为把HTTP 这些状态暴露给用户会有安全性问题,就等于告诉用户这次请求会发生什么了。可以都返回200.或者 内部统一定义一套,比如:返回10000 代表密码错误等

查看完整回答
反对 回复 2019-03-18
?
哔哔one

TA贡献1854条经验 获得超8个赞

严格来说,应该是放在HTTP code,但是实践中还是 HTTP code 200,放在消息体的居多。

查看完整回答
反对 回复 2019-03-18
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

200,404的意思是接口不存在

查看完整回答
反对 回复 2019-03-18
?
BIG阳

TA贡献1859条经验 获得超6个赞

就像你取邮件虽然没有来信 但是邮箱地址是存在的啊不能用404啊

查看完整回答
反对 回复 2019-03-18
?
白板的微信

TA贡献1883条经验 获得超3个赞

这个因使用者的偏好而异吧,有的是通过响应体的格式来约束的,有的是通过 http status code + 响应体来约束的。

因为你有提及 rest,所以用 404 其实没什么问题的,rest 本来就有意将 http method 和 http status 与资源关联起来,别的答案有提及返回 404 无法分清接口层面和资源层面的不存在问题,这个 404 状态的请求也是可以回传 body 的呀,有什么分不清的呢?还有说涉及安全问题的更远了吧,4xx 是指 Client Error,是不会直接返回错误堆栈信息的,如果要说用户体验的话,会影响一些,不过可以通过自定义 4xx 的响应页面来改善。

使用 200 的话,也没有什么绝对意义上的错误,只是一种习惯而已,据我所知,腾讯大部分接口均是按照 200 这种消息格式来传达的。所以因地制宜吧,看是偏向于使用哪种,但是切记不要混用,容易产生混乱。

另外再说一点,如果前端一直期望于返回 200 状态的接口,而忽视错误处理的话,其实并没有什么好处。

查看完整回答
反对 回复 2019-03-18
  • 10 回答
  • 0 关注
  • 2453 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信