我正在设计POST Restful API,在这种情况下,我必须根据请求正文中提供的元素之一来授权用户。例如。
{
division : "1",
name : "MyName",
address:{
no : 123,
street : "abc",
pincode : 222111
}
....
}
Run Code Online (Sandbox Code Playgroud)
因此,发出POST请求的用户应被授权在部门1上工作。我无法在没有请求正文的情况下授权该用户。
同样,为了验证某些属性,我必须在数据库中进行大量的数据库调用,例如,检查上述地址是否具有有效的密码。
所以我的问题是我应该如何将错误代码返回给用户-
基本上哪个错误代码可以继续执行其他操作?
也可以做类似的事情:
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错误代码
如有疑问,请查看RFC
400 错误请求
由于语法格式错误,服务器无法理解该请求。客户端不应该在没有修改的情况下重复请求。
403 禁地
服务器理解请求,但拒绝满足它。授权无济于事,不应重复该请求。如果请求方法不是 HEAD 并且服务器希望公开请求未完成的原因,它应该在实体中描述拒绝的原因。如果服务器不想让客户端可以使用此信息,则可以使用状态代码 404(未找到)来代替。
如果请求中未提供除法 - 400 还是 403?
我认为两者都不适用。语法——尽管它缺少一些数据——没有格式错误。
由于引用中提到的原因,403 似乎也不正确:授权无济于事等。
怎么样422无法处理的实体?
422 不可处理的实体(WebDAV;RFC 4918)
该请求格式正确,但由于语义错误而无法遵循。
这就是我在这种情况下通常使用的方法。
如果提供了除法,但用户未被授权且密码无效 - 400 表示无效密码或 403?
同样,我不认为 400 或 403 在这里是一个很好的例子。专门针对这种情况,401存在
401 未授权
与 403 Forbidden 类似,但专门用于需要身份验证但已失败或尚未提供的情况。响应必须包含一个 WWW-Authenticate 头字段,其中包含适用于所请求资源的质询。请参阅基本访问身份验证和摘要访问身份验证。
| 归档时间: |
|
| 查看次数: |
7945 次 |
| 最近记录: |