每当我在基于Django / Piston的 REST API 应用程序中遇到验证失败时,我目前都会返回 401 Unauthorized 。看过HTTP 状态代码注册表后 ,我不相信这是验证失败的合适代码,你们都推荐什么?
更新 :上面的“验证失败”是指应用程序级别的数据验证失败,即错误指定的日期时间、伪造的电子邮件地址等。
如果“验证失败”意味着请求中有一些客户端错误,则使用 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,这样它就知道要发送什么样的凭据以及以什么格式发送。[…]