如果传入正文的 id 不存在/无效,请更正 http 错误代码?

ric*_*oon 5 java rest jax-rs jersey jersey-2.0

如果正文中指示的 id 不存在,正确的 http 错误代码是什么?

示例:cityId 123 在数据库中不存在

POST /profiles
{
    "name":"foo",
    "cityId":123
}
Run Code Online (Sandbox Code Playgroud)

是404吗?400?还是422?

Ian*_*son 5

最终取决于你,但我会说 422。

400 表示请求格式错误,但事实并非如此。该请求在词法上完全有效,因此您可以正常解析和处理它。

http://www.restpatterns.org/HTTP_Status_Codes/400_-_Bad_Request

404 表示请求的 URL 不存在。资源(即 Web 服务端点)确实存在。如果 id 是 URL 的一部分,即在查询字符串中,我可能会建议不同的答案。404 仅在我的经验中指 URL,而不是 POSTed 正文。另请注意,下面的链接仅在 URL 上下文中引用 404,而不是 POST 正文的内容。

http://www.restpatterns.org/HTTP_Status_Codes/404_-_Not_Found

因此,这使 422 成为唯一有效的候选者。

http://www.restpatterns.org/HTTP_Status_Codes/422_-_Unprocessable_Entity

另一位发帖人建议 204,但这是不正确的,因为请求已处理,但未成功。所有 2** 状态代码都意味着一定程度的成功。

http://www.restpatterns.org/HTTP_Status_Codes/204_-_No_Content