REST API服务返回验证失败的适当HTTP状态代码是什么?

当我在基于Django / Piston的REST API应用程序中遇到验证失败时,我正在返回401 Unauthorized。 查看了HTTP状态代码注册表我不相信这是一个验证失败的适当代码,你们推荐什么?

  • 400错误请求
  • 401未经授权
  • 403禁止
  • 405方法不允许
  • 406不可接受
  • 412先决条件失败
  • 417期望失败
  • 422不可处理的实体
  • 424失败依赖
  • 更新 :上面的“验证失败”是指应用程序级数据验证失败,即错误指定的日期时间,伪造的电子邮件地址等。


    如果“验证失败”表示请求中存在某些客户端错误,则使用HTTP 400(错误请求)。 例如,如果URI应该有一个ISO-8601的日期,并且你发现它的格式不正确,或者指的是2月31日,那么你会返回一个HTTP 400.如果你希望在实体中使用格式良好的XML,它无法解析。

    (1/2016):在过去的五年中,WebDAV的更具体的HTTP 422(不可处理的实体)已经成为HTTP 400的一个非常合理的替代品。请参阅其在JSON API中的使用。 但请注意,HTTP 422尚未将其转换为HTTP 1.1,RFC-7231。

    Richardson和Ruby的RESTful Web服务包含一个非常有用的附录,介绍何时使用各种HTTP响应代码。 他们说:

    400(“错误请求”)
    重要性:高。
    这是通用的客户端错误状态,在没有其他4xx错误代码适用时使用。 当客户端提交表示以及PUT或POST请求时,通常使用它,表示形式是正确的,但它没有任何意义。 (第381页)

    和:

    401(“未经授权”)
    重要性:高。
    客户端尝试在受保护的资源上运行而不提供适当的身份验证凭证。 它可能提供了错误的凭据,或根本没有。 凭据可以是用户名和密码,API密钥或认证令牌 - 不管有问题的服务是否期望。 客户端通常会请求URI并接受401,以便知道要发送什么样的凭证以及以何种格式。 [...]


    从RFC 4918(也记录在http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml):

    422(不可处理的实体)状态码意味着服务器理解请求实体的内容类型(因此415(不支持的媒体类型)状态码不合适),并且请求实体的语法是正确的(因此400(错误请求)状态码不合适),但无法处理包含的说明。 例如,如果XML请求体包含格式正确(即,语法正确),但语义错误的XML指令,则可能会出现此错误情况。


    数据库中的副本应该是409 CONFLICT

    我建议使用422 UNPROCESSABLE ENTITY来验证错误。

    我在这里给出了4xx代码的更长的解释:http://parker0phil.com/2014/10/16/REST_http_4xx_status_codes_syntax_and_sematics/

    链接地址: http://www.djcxy.com/p/7923.html

    上一篇: What's an appropriate HTTP status code to return by a REST API service for a validation failure?

    下一篇: REST design of authenticate calls