Web services 后Restful API的响应代码400或403

Web services 后Restful API的响应代码400或403,web-services,rest,Web Services,Rest,我正在设计一个后Restful API,在这种情况下,我必须根据请求主体中提供的元素之一授权用户。 例如 因此,提出POST请求的用户应被授权在第1部分工作。我无法在未获取请求正文的情况下授权用户 此外,为了验证某些属性,我必须在DB中进行大量的DB调用,例如,检查上面的地址是否具有有效的pincode值 因此,我的问题是如何将错误代码返回给用户- [编辑]如果请求-400或403中的除法无效(系统中不存在的内容) 如果提供了除法,但用户未经授权且pincode无效-400表示无效pincode

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

因此,提出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错误代码,只需查看

    400错误请求

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


    403禁止

    服务器理解该请求,但拒绝满足该请求。 授权没有帮助,请求不应重复。如果 请求方法不是HEAD,服务器希望公开 为什么请求未得到满足,应说明原因 对于实体中的拒绝。如果服务器不希望 此信息可供客户端使用,状态代码为404(不适用) 找到)可以改为使用

    如果请求中未提供分割-400或403

    我认为两者都不适用。语法(尽管缺少一些数据)格式不正确。
    此外,403似乎不正确,因为报价中提到了上述原因:授权将无济于事等

    怎么样

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

    请求格式正确,但由于以下原因无法执行: 语义错误

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

    如果提供了除法,但用户未经授权且pincode无效-400表示无效pincode或403

    再说一遍,我认为400或403都不是一个很好的例子。特别是在这种情况下,401是存在的

    401未经授权

    类似于403禁止,但专门用于身份验证 是必需的,但已失败或尚未提供。反应 必须包括包含质询的WWW Authenticate标头字段 适用于请求的资源。请参阅基本访问身份验证 和摘要访问身份验证


    我认为你的思路是对的。假设每个请求都通过(http授权头)进行身份验证

  • 在缺少数据时返回400是可以的,此外,您可以添加错误响应主体,解释客户机请求未被接受的原因(在本例中为缺少的部分)

  • 如果发出请求的客户端未被授权与资源(在本例中为部门)交互,则返回403为OK

  • 如果客户机被授权与资源交互,则必须首先进行验证,因此必须首先发送403,如果缺少必填字段,则可以将其视为400(有适当的解释)

  • 如果客户机没有经过身份验证,正确的响应应该是401,但正如我前面所说的,我的响应中的1)和2)假设客户机是针对服务器进行身份验证的

    希望有帮助


    Jose Luis

    谢谢你的回答,我忘了在我的问题中提到一件事,我们不想使用422错误代码。如果pincode是必填属性且请求中未提供,则我的错误代码应该是什么。我应该先勾选403,然后再勾选400还是反过来?再勾选一个——如果请求正文中的除法无效,我想403不适用于您的任何情况。如果您不能或可能不使用422,您可以将400作为一般情况,但422更好。401与403有所不同,因此,在我的情况下,用户在提供的分区上是授权的,但被禁止的。我应该问——我应该先验证请求主体,然后执行授权部分,还是先检查部门,然后执行授权,然后执行其余主体验证?@VineetSingla authorize first。如果用户未经授权,则无需处理请求的其余部分。现在,请求已在响应中完成。还有一个问题-如果请求正文中的除法无效,该怎么办?提前谢谢你在第二个问题上错了。403与被授权与否无关。您根本无法访问it@VineetSingla该字段将为400,因为请求格式不正确,因此服务器无法处理该字段,请再次让客户端知道哪个字段出错,以便他们了解有关该字段的更多信息。@TimCastelijns请检查,特别检查:
    403响应通常表示以下两种情况之一:提供了身份验证,但不允许经过身份验证的用户执行请求的操作。禁止所有用户进行此操作。使用身份验证重复请求没有任何作用。
    在这种情况下,第一个条件是适用的条件。请不要依赖用户告诉您他们被授权做什么!POST请求非常容易查看和编辑;如果有人告诉你他们可以做任何他们想做的事,那是很平常的。用户应该确定自己的身份,然后告诉他们可以做什么。
    ${personaldighty}
    !原谅我,但我对你的申请所知甚少表明
    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)