我正在设计一个 POST Restful API,在这种情况下,我必须根据请求正文中提供的元素之一来授权用户。
例如。
{
division : "1",
name : "MyName",
address:{
no : 123,
street : "abc",
pincode : 222111
}
....
}
因此发出 POST 请求的用户应该被授权在第 1 部门工作。如果没有获取请求正文,我无法授权该用户。
另外,为了验证某些属性,我必须在 DB 中进行大量的 DB 调用,例如,检查上述地址是否具有有效的 pincode 值。
所以我的问题是我应该如何将错误代码返回给用户 -
- [编辑]如果请求中的除法无效(系统中不存在的东西) - 400 或 403 ?
- 如果提供了除法,但用户未经授权且 pincode 无效 - 400 表示无效 pincode 或 403 ?
- 如果 pincode 是强制属性并且请求中未提供,则错误代码应该是什么。我应该先检查 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)
[编辑]我们不想使用 422 错误代码
如有疑问,请查看RFC http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
400 错误请求
由于格式错误,服务器无法理解该请求
句法。客户端不应该重复请求
修改。
403 禁忌
服务器理解该请求,但拒绝满足它。
授权不会有帮助,并且不应重复请求。如果
请求方法不是 HEAD 并且服务器希望公开
为什么请求没有得到满足,它应该描述原因
对于实体的拒绝。如果服务器不希望
此信息可供客户端使用,状态码 404(不
发现)可以用它来代替。
如果请求中未提供除法 - 400 或 403?
我认为两者都不适用。语法 - 尽管缺少一些数据 - 是not畸形的。
此外,由于引用中提到的原因,403 似乎不正确:授权没有帮助 etc.
怎么样422 无法处理的实体 http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error?
422 无法处理的实体(WebDAV;RFC 4918)
该请求格式正确,但由于以下原因无法遵循
语义错误。
这就是我在这种情况下通常使用的方法。
如果提供了除法,但用户未经授权且 pincode 无效 - 400 表示无效 pincode 或 403?
再次强调,我认为 400 或 403 都不是一个好的案例。针对这种情况专门存在401
401 未经授权
类似于403禁止,但是专门用于身份验证时使用
为必填项,但已失败或尚未提供。响应
必须包含包含质询的 WWW-Authenticate 标头字段
适用于所请求的资源。请参阅基本访问身份验证
和摘要访问认证。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)