当前位置:  开发笔记 > 后端 > 正文

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

如何解决《RESTAPI服务为验证失败返回的适当HTTP状态代码是什么?》经验,为你挑选了5个好方法。

每当我在基于Django/Piston的REST API应用程序中遇到验证失败时,我目前正在返回401 Unauthorized .看过HTTP状态代码注册表后 我不相信这是验证失败的合适代码,你们都推荐什么?

400错误请求

401未经授权

403禁止

405方法不允许

406不可接受

412前提条件失败

417期望失败

422不可处理的实体

424依赖失败

更新:上面的"验证失败"表示应用程序级别数据验证失败,即错误指定日期时间,虚假电子邮件地址等.



1> Jim Ferrans..:

如果"验证失败"意味着请求中存在某些客户端错误,则使用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,因此它知道要发送什么类型的凭据以及采用何种格式.[...]


正如@ReWrite所述,我也认为422更适合验证错误.
我说这是错的.如果请求存在语法错误,则使用400 Bad Request.我会说ReWrite推荐422是正确的,这是关于请求的*内容*.
错误的用户和密码是401相同的?
但是,如果URI格式无效,404可能更合适.
@Kenji是,401(“未授权”):“它可能提供了错误的凭据...”表示错误的用户名和/或密码。
@JimFerrans 400错误是给定的语法不正确的地方。401错误专门用于如果我试图访问需要登录才能访问的页面,而我却根本没有登录。422错误是针对语法正确的位置,但是服务器拒绝服务。错误的用户名/密码是正确的语法(不是400错误),并且我没有尝试访问需要登录的页面,因为我正在访问登录页面本身(不是401错误)。401错误应用于仅用户可以访问的设置页面之类的内容

2> ReWrite..:

来自RFC 4918(并且还记录在http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml):

422(不可处理实体)状态代码表示服务器理解请求实体的内容类型(因此415(不支持的媒体类型)状态代码是不合适的),并且请求实体的语法是正确的(因此400(错误请求) )状态代码不合适)但无法处理包含的指令.例如,如果XML请求主体包含格式正确(即语法正确)但语义错误的XML指令,则可能发生此错误情况.


我建议422 - 不可处理的实体用于超过400的验证失败 - 错误请求

3> 小智..:

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

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

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



4> honzajde..:

这里是:

rfc2616#section-10.4.1 - 400错误请求

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

rfc7231#section-6.5.1 - 6.5.1.400错误请求

400(错误请求)状态代码指示服务器由于被认为是客户端错误(例如,格式错误的请求语法,无效的请求消息成帧或欺骗性请求路由)而不能或不会处理该请求.

指畸形(不良)的案件!

rfc4918 - 11.2.422不可处理的实体

422(不可处理实体)状态代码表示服务器
理解请求实体的内容类型(因此415(不支持的媒体类型)状态代码是不合适的),并且请求实体语法是正确的(因此400(错误请求) )状态代码不合适)但无法处理包含的指令.例如,如果XML请求主体包含格式正确(即语法正确)但语义错误的 XML指令,则可能发生此错误情况.

结论

经验法则:[_] 00涵盖指定代码未涵盖的最一般情况和案例.

422适合最佳对象验证错误(正是我的建议:)
至于语义错误 -想想"此用户名已存在"验证.

400错误地用于对象验证



5> jspcal..:

我会说在技术上它可能不是HTTP失败,因为资源(可能)有效地指定,用户经过身份验证,并且没有操作失败(但是,即使规范也包含一些保留代码,如402 Payment Required are aren'严格来说,与HTTP相关,但建议在协议级别使用,以便任何设备都可以识别这种情况.

如果确实如此,我会在响应中添加一个状态字段,其中包含应用程序错误,例如

4 日期范围无效

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有