Restful API 资源未找到应该返回什么状态码?

2019-06-27 21:20:04 +08:00
 zuoakang

需求是这样的: 查询某个用户是否存在,GET users/zhangshan

我这边使用的是 drf 框架,为了与框架统一,资源未找到返回的状态码都是 404。

与我这边对接的是 java 后台,他们觉得返回 404 会被他们 try cache,认为是请求参数有问题或者 URL 出错,程序不往下走了,而返回 200,response 为空,程序会往下走,而且知道 zhangshan 这个对象为空。

大家觉得资源不存在应该返回什么状态码呢?

12144 次点击
所在节点    程序员
93 条回复
jss
2019-06-28 08:36:53 +08:00
http 的返回状态应该是 200 里面的 error code 是 404 或其他
justfindu
2019-06-28 08:38:46 +08:00
空应该返回 noContent 呀... 204
darknoll
2019-06-28 08:40:56 +08:00
啥意思,有了 java 做后台你是干啥的?中间还加个网关?
m939594960
2019-06-28 08:42:21 +08:00
规范不一定是好的,科学家不一定全是对的,只有最符合你业务,大家写的都开心的规范才是真正有意义的。
zw1027
2019-06-28 09:07:05 +08:00
http response 200
json 数据里面写好 code 404 和相应的 message
这样
triptipstop
2019-06-28 09:15:45 +08:00
404

说状态码不够用的
那是因为你把逻辑放给客户端实现了
HangoX
2019-06-28 09:20:17 +08:00
很明显人家不是 rest api 开发的,你们商量吧,毕竟如果多的话,改起来挺麻烦的
littleshy
2019-06-28 09:20:28 +08:00
没人觉得是 204 吗?
404 应该是没有这个访问路径。没有内容应该是 204。
littleshy
2019-06-28 09:21:30 +08:00
@justfindu #42 握手。
TimPeake
2019-06-28 09:23:03 +08:00
你都说了 Restful API。
按照这个标准不应该是 Status Code 为 404 吗
zachlhb
2019-06-28 09:23:22 +08:00
很多前端根本不会用 http status,其实前端发请求完全可以拦截到不是 200 的请求的,但是很多人只会处理 200 响应的请求
abcbuzhiming
2019-06-28 09:29:07 +08:00
楼主,你太纠结了,首先 Restful API 又不是完美的没有缺陷的体系,其次实际生产环境也没有完美,过于追求贴合理论,有的时候是给自己找不愉快
annielong
2019-06-28 09:31:41 +08:00
404 一般底层 http 用,业务层如果没有找到数据,那也是 http status 返回 200 才有的情况,这种时候不能懒省事用 404
mamian
2019-06-28 09:47:33 +08:00
自己用的感受,Restful 会更规范。前端使用起来会更爽,因为不需要二次判断,直接在 catch 里边写错误处理就好,错误信息和错误码由后端返回,如果状态是 200,就需要前端二次判断。
starryin
2019-06-28 09:59:32 +08:00
用哪种方法都是看团队约定,我只提两点:1. spec 里已经说明了 4xx 的返回同样可以带 message body 详细说明错误,2. 对于运维有大量现成的工具,针对状态码进行统计,分析报告及可视化,你在 message body 里自定义错误码后当然也可以做同样的事情,不过多少要绕一些路
freakxx
2019-06-28 10:05:26 +08:00
哈哈哈,java 现在给我的印象就是万物皆 200,

我还是比较支持 404,有需要的话再自己做个 message 和业务 code
cwm165
2019-06-28 10:22:07 +08:00
这里的返回 code 不应该和 http status code 混起来用。资源未找到可能是你业务代码或者逻辑未覆盖到边界条件,那么这的错误并不是 http 的错误。返回 code 200 在此处只代表本次 http 请求已完成,那具体出错的原因会在 message 给出。
Huelse
2019-06-28 10:28:06 +08:00
虽然我也比较支持 404,但是这个会在 console 报错误提示的,而且一般来说,400 系的错误属于用户错误。所以最后都选择 200 确保响应后返回 msg
KyonLi
2019-06-28 10:38:00 +08:00
用户收藏列表接口,如果用户没有收藏过应该返回 404 还是 200
sikariba
2019-06-28 10:46:30 +08:00
既然说了是 RESTful,那就应该返回 404,但是明显前端没有适配 RESTful。
这个帖子挺好,学习了

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

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

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

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

© 2021 V2EX