当我执行POST请求以创建新用户时,返回正确的HTTP状态会是什么,但其中一个参数不正确 - 我包含的用户数据的公司ID不存在于数据库中。
POST 数据:{username:' newuser',年龄:99, company_id:34 }
数据库中不存在ID为34的公司。
我在想是否可以:
答案 0 :(得分:2)
404 Not Found
请求, POST
是一个有问题的状态。它意味着您发送请求的资源不存在;调用者错误地识别了URL。
最明显(和通用)的答案是:400 Bad Request
这只表示您的请求有问题(错误在于调用者而不是服务器),然后表达您的响应正文中出错的具体细节。这通常是处理请求验证的方式。
理想的答案是为了让您通过向他们所属的公司发送请求来添加用户:
POST /company/34
Content-Type: application/json
{
"username": "newuser",
"age": 99
}
这意味着调用者必须找到一个有效的company
资源来发送请求。如果company/34
不存在,则404 Not Found
响应是合适的;您尝试将用户添加到不存在的公司。
这意味着您的API必须使用资源语义进行结构化,并且用户必须属于一家公司。
答案 1 :(得分:2)
400
或422
首先,请保持最小值为client error,因此5xx
状态代码不适用于此处。您应该选择4xx
状态代码。
请参阅RFC 4918中的以下引用(针对您的情况,只需阅读 JSON ,当它说 XML 时):
11.2. 422 Unprocessable Entity
422
(不可处理的实体)状态代码表示服务器 了解请求实体的内容类型(因此a415
(不支持的媒体类型)状态代码不合适),以及 请求实体的语法是正确的(因此400
(错误请求) 状态代码不合适但是无法处理包含的内容 说明。例如,如果是XML,则可能会出现此错误情况 请求正文包含格式正确(即语法正确),但是 语义错误的XML指令。
此answer已解决了类似情况。
例如,如果有效负载的内容包含无效值(但在语法上有效),GitHub API v3也会返回422
:
API调用有三种可能的客户端错误类型 收到请求机构:
发送无效的JSON将导致
400 Bad Request
响应。 [...]发送错误类型的JSON值将导致
400 Bad Request response
。 [...]- 醇>
发送无效字段会导致
422 Unprocessable Entity
响应。 [...]
Michael Kropat汇总了set of diagrams,在选择最合适的状态代码方面非常有见地。有关4xx
状态代码,请参阅下图:
答案 2 :(得分:1)