例如,您发送了一个GET请求,请求的是
users/9
,但是没有ID为9的用户。
最合适的响应代码是哪个?
- 200 OK
- 202 Accepted
- 204 No Content
- 400 Bad Request
- 404 Not Found
users/9
,但是没有ID为9的用户。
最合适的响应代码是哪个?
如果仅因响应中没有数据就返回404状态码,会让任何客户端感到非常困惑。
对我来说,响应代码为200且主体为空足以表明一切都完美,但没有符合要求的数据。
{id,model,year}
,因此只是一个具有简单字段的JSON对象。如果汽车1不存在,您介意澄清一下我应该得到什么,如果我发出GET:/uri/to/cars/carid(/uri/to/cars/1)?我的意思是,根据适当的实践,我应该得到的状态和主体是什么?非常感谢。 - pixel404
,也许是更专业的 410
,对于正文,我建议使用常见的错误格式,例如 RFC 7807。 - Evert这是我解决问题的笔记:
/users/{user-id}
中不存在的用户ID时,我应该得到一个错误而不是成功响应。为什么:因为我期望用户ID存在,因为你从用户列表(在网站上)中获取用户ID,然后单击它,这意味着它应该存在。使用新的错误代码来人为触发“未找到任何内容”,例如488表示“资源未找到”,意思是:“URL下的函数无法找到任何内容(在服务器或数据库中),我们引发了错误,因为您确定某些内容存在”
只有在URL不正确时,404才会自动触发,这是每个服务器的常见行为。
3.1) 这将使理解和调试变得更加容易,因为:
404会告诉您您的URL有误,甚至没有到达服务器
另一方面,488会针对每种搜索情况(如/users/9
或/users?id=9
或/users + id_in_a_post_request_body
)告诉您,由于某种原因您期望存在的用户不存在,因此您无法继续计划的工作(呈现“用户”页面)。
为什么不使用410?它表示所请求的资源已不存在,客户端不应再请求该资源,在您的情况下是users/9
。
您可以在此处找到有关410的更多详细信息:https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Ruby on Rails
会响应 404 Not Found
。404 Not Found
更为合适。
我发现,在这种情况下,许多开发人员不喜欢 404未找到
。
如果您不想使用 404
,我认为您可以使用以下两个响应代码之一:
如果您使用 200 OK
:响应正文应该是空的json
:[]
或{}
如果您使用 204 OK
:响应正文应该是空的。