小编典典

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

all

每当我在基于Django /
Piston的 REST API
应用程序中遇到验证失败时,我目前都会返回 401 Unauthorized 。看过HTTP
状态代码注册表

,我不相信这是验证失败的合适代码,你们都推荐什么?

  • 400 错误请求
  • 401未经授权
  • 403 禁止
  • 405 方法不允许
  • 406 不可接受
  • 412 前置条件失败
  • 417 期望失败
  • 422 无法处理的实体
  • 424 依赖失败

更新 :上面的“验证失败”是指应用程序级别的数据验证失败,即错误指定的日期时间、伪造的电子邮件地址等。


阅读 79

收藏
2022-03-18

共1个答案

小编典典

如果“验证失败”意味着请求中有一些客户端错误,则使用 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,这样它就知道要发送什么样的凭据以及以什么格式发送。[…]

2022-03-18