据我了解,除了返回404 Not Found
用于未知的端点,REST API在以下情况下还应返回404:
/users/{id}
存在,但/users/123456
不存在/search
存在,但如果用户不存在,/search?user=123456
返回404(I similar question几年前问过)现在,在端点接受带有多个字段的JSON对象的用例情况下,其中之一是不存在的用户的ID:
POST /makeReservation HTTP/1.1
...
{
"userId": 123456,
...
}
这是否还会返回404 ?还是在这种情况下,这是否被视为其他类型的错误(验证错误?)?
答案 0 :(得分:0)
据我了解
我要说的是,您当前的理解要复杂得多。
404 Not Found的意思是:
404(未找到)状态代码表示原始服务器未找到目标资源的当前表示,或不愿意透露该资源的存在。
如果不清楚“目标资源”,我们可以查看Request Line的规范。
request-line =方法SP请求目标SP HTTP版本CRLF
请求目标标识Section 5.3中定义的应用请求的目标资源。
换句话说,404
说“请求目标的拼写有问题”。
因此,当实际问题在请求正文中时,建议请求目标存在问题是一种误导。
在这种情况下,您可能需要的错误代码为422 Unprocessable Entity
422(不可处理实体)状态代码表示服务器 了解请求实体的内容类型(因此 415(不受支持的媒体类型)状态码不正确),并且 请求实体的语法正确(因此为400(错误请求) 状态代码不正确),但无法处理其中的内容 说明。例如对于如果XML可能会出现此错误情况 请求正文包含格式正确(即语法正确)的内容,但 语义错误的XML指令。
IANA的HTTP Status Code Registry是一个确定地方,当您确定应该为您的用例提供标准化代码时,却很难猜测哪个规范描述了它。
它是WebDAV的一部分,我不确定将其用于其他应用程序是否正确?
TL; DR:如果用于其他应用程序,则是正确的。
HTTP规范定义了process,通过它可以将新代码添加到状态代码注册表中,并且WebDAV代码遵循该过程。因此我们可以确信422的含义不会被其他语义替代(出于兼容性的考虑,状态码已淘汰-参见状态码306。)
WebDAV规范中422的定义不是特定于WebDAV的。
此外,RFC 7231
中描述了不了解WebDAV规范的客户端的行为。客户必须理解第一个数字所指示的任何状态码的类别,并且将无法识别的状态码视为等同于该类别的x00状态码,但接收者不得缓存响应带有无法识别的状态代码。
您还可以查看appendix B WebDAV规范。
(作为附带说明,我认为您的担心是合理的-在此上下文之外,WebDAV 方法很难重用。)