传递无效ID时,RESTful API是否应返回400或404

时间:2014-08-19 08:16:35

标签: api rest

在构建RESTful API并且用户提供不存在的 id 资源时,您应该返回404 Not Found还是400 Bad Request

例如:

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

foobar 不存在。

6 个答案:

答案 0 :(得分:34)

如果资源不存在,我会返回404(意味着url路径错误),只有在使用某些无效数据(@PathParam)进行其余调用时,我才会返回400 https://api.domain.com/v1/profile/test@email:我在这里试图获取电子邮件ID的个人资料,但电子邮件本身是错误的,所以我将返回400.
https://api.domain.com/v1/profile1111/test@email.com将返回404,因为网址路径无效。

答案 1 :(得分:13)

应为404(未找到)。如果由于语法错误而无法满足请求,则使用400,但是对于您的情况,语法是正确的,但是没有资源foobar。

如果用户使用不存在的API,则可以使用400,如下所示:

https://api.domain.com/v1/nonexistAPI/xyz/xyz

您还可以参考此REST API Design Blog,它告诉您如何设计REST错误代码。

答案 2 :(得分:9)

我认为

404 Not Found是正确的答案,400更多的是关于请求的主体而不是资源标识符,所以例如你可以通过验证错误发送它。

答案 3 :(得分:8)

这是一个有效的请求吗?可以存在资源的id吗?它是否格式化为正确的ID?它在语法上是否正确?等等。如果是这样,那么你可以使用404 Not Found。否则400 Bad Request更合适。

答案 4 :(得分:1)

404将是一种更常见的做法。它用于Resource Not Found。在您的情况下,找不到特定的URL。

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

答案 5 :(得分:1)

根据RFC(https://tools.ietf.org/html/rfc2616#section-10.4) 当“服务器未找到与Request-URI匹配的任何内容”时,API应该返回404。

找到资源后将是400,但是请求本身格式错误。

例如: 一世。 https://api.domain.com/v1/resource/foobar

不存在foobar的地方应返回404

ii。 https://api.domain.com/v1/resource/foobar 如果存在foobar,但是请求错误({age:“ NOTANINTEGER”},例如,字符串而不是int),则应返回400。

希望我能帮上忙。