Rest 修补程序请求的HTTP状态代码,意思是;不允许您提出此类请求。”;

Rest 修补程序请求的HTTP状态代码,意思是;不允许您提出此类请求。”;,rest,http,Rest,Http,我正在尝试在我们的软件中实现一些补丁请求(如下)。资源中有一些字段不能修改,所以我想在HTTP JSON请求体中出现这些字段时返回一些错误状态代码。400似乎有点过于通用(我使用它来验证错误,例如电子邮件格式等)。也许在这种情况下还使用了其他一些状态代码?有一个代码。8-) 服务器理解该请求,但拒绝满足该请求。授权没有帮助,请求不应重复。如果请求方法不是HEAD,并且服务器希望公开请求未被满足的原因,那么它应该描述原因 此外,即使没有凭证问题,403也是合适的。 下文对此进行了解释: 由于某些

我正在尝试在我们的软件中实现一些补丁请求(如下)。资源中有一些字段不能修改,所以我想在HTTP JSON请求体中出现这些字段时返回一些错误状态代码。400似乎有点过于通用(我使用它来验证错误,例如电子邮件格式等)。也许在这种情况下还使用了其他一些状态代码?

有一个代码。8-)

服务器理解该请求,但拒绝满足该请求。授权没有帮助,请求不应重复。如果请求方法不是HEAD,并且服务器希望公开请求未被满足的原因,那么它应该描述原因

此外,即使没有凭证问题,403也是合适的。 下文对此进行了解释:

由于某些原因,请求可能被禁止 与证书无关

一个状态码,所以这是开始的地方

这显然是请求的一个问题;客户端可能能够修复的东西,因此4xx类中的条目是合适的

对于您描述的情况是错误的--此资源将接受不同的合并修补程序文档,但不接受当前的文档

是错误的,因为它传达了与凭据相关的问题,但您描述的是负载问题

可能是合理的

由于与目标资源的当前状态冲突,无法完成请求

我看不出有任何理由认为冲突不能处于“当前状态”的不变部分

但我认为你最好的选择是

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

另一个需要考虑的好资源是HTTP补丁规范。列举修补程序可能失败的许多原因,以及适合在每个上下文中使用的代码。你可以自己决定这些区别是否适合你的情况

也可能有更具体的错误,如“冲突状态”,可以用此状态代码发出信号,但更具体的错误通常会更有帮助


对于乐观锁异常,我使用409。422是合理的,我同意。有人可能会认为,在罗伊·菲尔丁的论文引起的宗教争论之后,社区现在已经达成了一些共识。。我的意思是,关于这样一些基本的东西:)但也许我“没有以正确的方式做事情”:)我看到的一个解决方案是,人们只需亲吻并发布所有内容(除了获取和删除),这样他们至少不会违反在某个不知名的地方发现的一些不知名的短语……“我使用409表示乐观锁例外。”如果您正在利用HTTP内置的条件请求功能,那么
412前提条件失败将是有意义的。您是对的。不过,为了增加复杂性,我在作者的文章中发现了以下很好的分析“即使在将接收到的版本与当前版本进行比较之后(这意味着从数据库读取存储的记录并在更新之前),也可能会有另一个事务在同一时刻更改记录。因此,仍有可能发生OptimisticLockException。在本例中,HTTP状态码409(冲突)被返回。”:)我不认为施瓦勒的论点有说服力,并且对依赖于实现细节的状态码有着深刻的怀疑。但在这两种情况下,其他警察都不会追捕你。”如果服务器检测到可能存在冲突的修改,并且请求中未定义前提条件,则服务器可以返回409(冲突)响应。”(RFC 5789).我不保证正确解释后的标准会支持我的主张。正如@VoiceOfUnreason所说,我也觉得403更多地被用于沟通凭证问题。例如,Wkipedia说“HTTP 403是HTTP服务器与客户端通信的标准HTTP状态代码,表示服务器理解请求,但由于与授权相关的原因,不会执行请求”,尽管在同一wikipedia页面上发现的IIS使用的子代码实际上支持您的观点。
403 Forbidden