在构建RESTful API并且用户提供不存在的 id 资源时,您应该返回404 Not Found
还是400 Bad Request
。
例如:
https://api.domain.com/v1/resource/foobar
foobar 不存在。
答案 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
。你可以用这个来处理任何不好的请求。例如。 MissingRequiredQueryParameter
,InvalidInput
。
答案 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。
希望我能帮上忙。