POST Restful API的响应代码400或403

时间:2015-04-28 06:53:46

标签: web-services rest

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

{
division : "1",
name : "MyName",
address:{
no : 123,
street : "abc",
pincode : 222111
}
....
}

因此,发出POST请求的用户应该被授权在第1部分工作。我无法在没有获得请求主体的情况下授权用户。

还要验证我在DB中进行大量DB调用的一些属性,例如,检查上述地址是否有有效的pincode值。

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

  1. [编辑]如果请求中的分区无效(系统中不存在的东西) - 400或403?
  2. 如果提供了分割,但用户未获得授权且密码无效 - 400无效密码或403?
  3. 如果密码是强制属性且请求中未提供,则错误代码应该是什么。我应先检查403然后再检查400还是反转?
  4. 基本上哪个错误代码继续进行另一个?

    也可以这样做:

    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错误代码

2 个答案:

答案 0 :(得分:2)

如有疑问,请查看RFC

  

400错误请求

     

由于格式错误,服务器无法理解该请求   句法。客户端不应该重复请求   修改

  

403 Forbidden

     

服务器理解请求,但拒绝履行请求。   授权无效,请求不应重复。如果   请求方法不是HEAD,服务器希望公开   为什么请求没有得到满足,它应该描述原因   因为该实体的拒绝。如果服务器不想做   此信息可供客户使用,状态代码404(不是   找到了)可以代替使用。

如果请求中没有提供除法 - 400或403?

我认为不适用。语法 - 尽管它缺少一些数据 - 格式错误 由于上面引用的原因,403似乎也不正确:授权无法帮助等。

422 Unprocessable Entity怎么样?

  

422 Unprocessable Entity(WebDAV; RFC 4918)

     

请求结构良好但由于无法遵循   语义错误。

这就是我在这种情况下经常使用的。

如果提供了分割,但用户未获得授权且密码无效 - 无效密码为400或403?

同样,我不认为400或403在这里做得很好。特别针对这种情况,401存在

  

401未经授权

     

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

答案 1 :(得分:0)

我认为你正走在正确的轨道上。假设每个请求都通过(http授权标头)进行身份验证

  1. 返回400,关于缺失的数据是可以的,此外,您可以添加错误响应正文,解释客户端请求未被接受的原因(在这种情况下是缺少的部门)。

  2. 返回403,如果发出请求的客户端未被授权与资源交互(在这种情况下是分部),则可以。

  3. 如果客户有权与资源进行交互,您必须先验证,因此必须先发送403,如果缺少必填字段,则可以将其视为400(有正确的解释)。 / p>

  4. 如果客户端未经过身份验证,则正确的响应应为401,但正如我之前所说,1)和2)在我的响应中假设客户端已针对服务器进行身份验证。

    希望它有所帮助,

    何塞路易斯