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

场景获取用户聊天信息 : 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

https://img3.mukewang.com/5c8f39e90001f0b208000295.jpg

GitHub:https://api.github.com/search...:Ruan Yifeng3

https://img2.mukewang.com/5c8f39ea0001f5f008000327.jpg

喵喔喔
浏览 2458回答 10
10回答

小趴菜木木

我觉得如果是数据不存在,状态码(http status)返回200要好一些。因为如果返回404则有点觉得这个接口不存在,而不是数据不存在。然后消息体再来说明数据找不到,比如:而真正找不到接口、页面,则由服务自己就抛出了404异常(当然你可以去捕获,然后稍作处理)

天涯尽头无女友

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

慕盖茨4494581

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

慕森卡

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

鸿蒙传说

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

哔哔one

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

元芳怎么了

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

BIG阳

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

白板的微信

这个因使用者的偏好而异吧,有的是通过响应体的格式来约束的,有的是通过 http status code + 响应体来约束的。 因为你有提及 rest,所以用 404 其实没什么问题的,rest 本来就有意将 http method 和 http status 与资源关联起来,别的答案有提及返回 404 无法分清接口层面和资源层面的不存在问题,这个 404 状态的请求也是可以回传 body 的呀,有什么分不清的呢?还有说涉及安全问题的更远了吧,4xx 是指 Client Error,是不会直接返回错误堆栈信息的,如果要说用户体验的话,会影响一些,不过可以通过自定义 4xx 的响应页面来改善。 使用 200 的话,也没有什么绝对意义上的错误,只是一种习惯而已,据我所知,腾讯大部分接口均是按照 200 这种消息格式来传达的。所以因地制宜吧,看是偏向于使用哪种,但是切记不要混用,容易产生混乱。 另外再说一点,如果前端一直期望于返回 200 状态的接口,而忽视错误处理的话,其实并没有什么好处。
打开App,查看更多内容
随时随地看视频慕课网APP