POST Restful API的响应代码400或403

Vin*_*gla 5 rest web-services

我正在设计POST Restful API,在这种情况下,我必须根据请求正文中提供的元素之一来授权用户。例如。

{
division : "1",
name : "MyName",
address:{
no : 123,
street : "abc",
pincode : 222111
}
....
}
Run Code Online (Sandbox Code Playgroud)

因此,发出POST请求的用户应被授权在部门1上工作。我无法在没有请求正文的情况下授权该用户。

同样,为了验证某些属性,我必须在数据库中进行大量的数据库调用,例如,检查上述地址是否具有有效的密码。

所以我的问题是我应该如何将错误代码返回给用户-

  1. [EDIT]如果请求中的除法无效(系统中不存在的内容)-400或403吗?
  2. 如果提供了划分,但用户未被授权并且密码无效-400表示无效的密码或403?
  3. 如果密码是必填属性,但未在请求中提供,则错误代码应该是什么。我应该先检查403,然后再检查400还是反向?

基本上哪个错误代码可以继续执行其他操作?

也可以做类似的事情:

400 – request is bad, syntactically (division/pincode or other mandatory values not provided)
403 – authorize user
400 – request is bad, data specific validation (heavier operation, requiring to hit DB)
Run Code Online (Sandbox Code Playgroud)

[编辑]我们首选不要使用422错误代码

Tim*_*Tim 7

如有疑问,请查看RFC

400 错误请求

由于语法格式错误,服务器无法理解该请求。客户端不应该在没有修改的情况下重复请求。


403 禁地

服务器理解请求,但拒绝满足它。授权无济于事,不应重复该请求。如果请求方法不是 HEAD 并且服务器希望公开请求未完成的原因,它应该在实体中描述拒绝的原因。如果服务器不想让客户端可以使用此信息,则可以使用状态代码 404(未找到)来代替。

如果请求中未提供除法 - 400 还是 403?

我认为两者都不适用。语法——尽管它缺少一些数据——没有格式错误。
由于引用中提到的原因,403 似乎也不正确:授权无济于事等。

怎么样422无法处理的实体

422 不可处理的实体(WebDAV;RFC 4918)

该请求格式正确,但由于语义错误而无法遵循。

这就是我在这种情况下通常使用的方法。

如果提供了除法,但用户未被授权且密码无效 - 400 表示无效密码或 403?

同样,我不认为 400 或 403 在这里是一个很好的例子。专门针对这种情况,401存在

401 未授权

与 403 Forbidden 类似,但专门用于需要身份验证已失败或尚未提供的情况。响应必须包含一个 WWW-Authenticate 头字段,其中包含适用于所请求资源的质询。请参阅基本访问身份验证和摘要访问身份验证。