构建 RESTful API 时,如果用户提供的资源 身份证不存在,则应返回 404 Not Found或 400 Bad Request。
404 Not Found
400 Bad Request
例如:
https://api.domain.com/v1/resource/foobar
其中 Foobar不存在。
应该是404(未找到)。如果由于语法不正确而无法完成请求,则使用400,但是对于您的情况,语法是正确的,但是没有资源 foobar。
如果用户使用不存在的 API,你可以使用400,如下所示:
https://api.domain.com/v1/nonexistAPI/xyz/xyz
您还可以参考这个 设计博客,它告诉您如何设计 REST 错误代码。
请求有效吗?资源的 id 是否存在?它的格式是否正确?句法正确吗?等等。如果是这样,那么您可以使用 404 Not Found。否则 400 Bad Request更适合。
我认为 404 Not Found是正确的答案,400更多的是关于请求的主体,而不是资源标识符,所以例如,你可以通过验证错误发送它。
400
如果资源不存在(意味着 URL 路径是错误的) ,我将返回404,并且只有当休息调用使用某些无效数据(例如@PathParam)时,我才返回400 Https://api.domain.com/v1/profile/test@email : 在这里我试图获得电子邮件标识的配置文件,但电子邮件本身是错误的,所以我将返回400。 Https://api.domain.com/v1/profile1111/test@email.com 将返回404,因为 url 路径无效。
404将是一个更常见的实践之一。它为 Resource Not Found。在您的情况下,特定的网址是找不到的。
404
Resource Not Found
400通常用于 Bad Request。你可以用它来处理任何不好的请求。例如,MissingRequiredQueryParameter,InvalidInput。
Bad Request
MissingRequiredQueryParameter
InvalidInput
根据 RFC (https://www.rfc-editor.org/rfc/rfc2616#section-10.4) 时,应返回404
“服务器没有发现任何与 Request-URI 匹配的内容”,
这就是你的例子。
400是在找到资源的时候,但是请求本身是畸形的。
例如: 我。 Https://api.domain.com/v1/resource/foobar
如果 foobar 不存在,应该返回404
Https://api.domain.com/v1/resource/foobar 如果 foobar 确实存在,但是请求是错误的(例如,{age:"NOTANINTEGER"}是 string而不是 int) ,那么它应该返回400。
{age:"NOTANINTEGER"}
string
int
希望我能帮上忙。