返回HTTP 409是否适合进行验证检查?

Mat*_*kel 11 validation http http-status-codes

我有一项服务,其中必须检查一些验证规则,然后才能进行特定的操作.

例如,如果未满足所有验证规则,则客户端不应生成可打印的报告.

但是,单个客户端可能没有所有必需的信息(用户可能只能访问用于确定验证成功的数据子集),因此必须将请求发送到服务器:基本上"是" thingstart和之间有效finish."

响应将是某种表示VALID: FEEL FREE TO CONTINUE可以呈现给用户的令牌,或者是验证失败原因的列表.

很明显,成功的验证将返回一个200 OK.但我不认为成功状态代码适合于验证失败.我倾向于a 409 Conflict,但我只是用它来拒绝PUT或者POST.是否有效(窃笑)以a表示验证失败409,或者有更好的方法吗?

注意:执行的操作不是在服务器上执行的,因此403在禁止操作的情况下跳过此检查,只是尝试操作不是一个选项.

Dam*_*ver 23

您已向服务器发送请求以执行验证.它已成功执行所述验证.从HTTP的角度来看,请求已经很好地形成并由服务器正确处理.

所以我要说返回任何HTTP错误代码都是不正确的.


这个答案继续收到downvotes,我不完全确定为什么(没有一个downvoters似乎留下任何评论).通过与OP的大量来回,我们确定此请求/响应的整个要点是执行验证.服务器收到请求,它执行了请求执行的验证,并将验证过程的结果返回给调用者.

发送此请求的客户端完全没有问题.

服务器理解请求.

请求有效(从HTTP角度来看).

服务器可以处理请求.

服务器执行了100%的活动,并返回处理请求时生成的结果.

这就是为什么,正如我所说,我不相信HTTP错误代码是合适的.

即假设服务器公开了一个验证电子邮件地址的端点(对于您希望表示可以执行验证的任何特定形式).它收到一条请求"验证abc@invalid.org"并发出回复说"我查看了这个电子邮件地址,我希望您告诉用户我无法获得有效的DNS响应无效.ORG".如果人们不认为这里的回答是正确的,我很乐意理解他们的推理.

  • -1`403 Forbidden服务器理解请求,但拒绝履行它.并且'410 Gone所请求的资源在服务器上不再可用,并且没有转发地址已知.是请求形成良好的两个错误并正确处理. (11认同)
  • @Stijn - 从我对原始问题的解读来看,这并不是在同一操作中进行进一步处理之前执行的验证.此服务(端点)有一个目的 - "请为我运行一些验证".如果*有*运行验证(无论结果如何),它已经完成了它打算做的所有工作.它不是*拒绝服务,所以403似乎错了. (4认同)
  • 409是另一种情况,其中数据有效并被处理,但该动作被拒绝.在这种情况下,我们想知道进行是否安全.我可能更喜欢执行所需的操作,然后如果无法完成则返回错误,但是如果我们准备执行所述操作,则必须在导致"最终"操作的更改之后进行指示. (2认同)

use*_*702 10

虽然它仍然在提议的标准中定义,但是处于422 Unprocessable Entity适当的状态.

422(不可处理实体)状态代码表示服务器理解请求实体的内容类型(因此415(不支持的媒体类型)状态代码是不合适的),并且请求实体的语法是正确的(因此400(错误请求) )状态代码不合适)但无法处理包含的指令.

例如,如果XML请求主体包含格式正确(即语法正确)但语义错误的XML指令,则可能发生此错误情况.

参考文献: