当传递一个无效的 id 时,RESTful API 是否返回400或404

构建 RESTful API 时,如果用户提供的资源 身份证不存在,则应返回 404 Not Found400 Bad Request

例如:

https://api.domain.com/v1/resource/foobar

其中 Foobar不存在。

63472 次浏览

应该是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更多的是关于请求的主体,而不是资源标识符,所以例如,你可以通过验证错误发送它。

如果资源不存在(意味着 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。在您的情况下,特定的网址是找不到的。

400通常用于 Bad Request。你可以用它来处理任何不好的请求。例如,MissingRequiredQueryParameterInvalidInput

根据 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。

希望我能帮上忙。