我这里有一个特定的操作应该能够发生之前的一些验证规则必须进行检查的服务。
举例来说,如果所有的验证规则不被满足客户不应生成打印的报告。
然而,单个客户端可以不具有所有必需的信息(即用户可能仅能够访问被用来确定验证成功的数据的一个子集),因此请求必须被发送到所述服务器:基本上“是一个thing
之间的有效start
和finish
”。
响应要么是某种标志的指示VALID: FEEL FREE TO CONTINUE
,或验证失败原因的列表,可以呈现给用户。
很明显,一个成功的验证将返回一个200 OK
。 但我不觉得一个成功的状态码是适合于验证失败。 我倾向于一个409 Conflict
,但我只用过这拒绝PUT
或POST
。 它是有效的(窃笑)有一个指示验证失败409
,或者是有没有更好的办法?
注:未在服务器上执行的操作执行完毕,所以跳过此检查,只是尝试的动作,以403
中的动作的情况下被禁止是不是一种选择。
您已经发送到其执行验证服务器的请求。 它成功地执行所述确认。 从HTTP的角度来看,请求是良好形成并且由服务器正确处理。
所以我想说返回任何HTTP错误代码是不正确的。
这个答案继续收到downvotes,我完全不知道为什么(没有downvoters似乎留下任何意见)。 通过相当数量与OP来回的,我们建立了这个请求/响应的整个要点是执行验证。 服务器接收到的请求时,它执行其被要求执行验证,并且它返回该验证过程的结果给调用者。
有绝对没有错的客户端发送该请求。
服务器理解的请求。
该请求是有效的(来自HTTP角度)。
该服务器可以处理请求。
服务器执行它是为了活性的100%,并且将返回所产生在处理了请求的结果。
这就是为什么,我说,我不相信一个HTTP错误代码是适当的。
即想象服务器暴露了验证电子邮件地址(你想说能够进行验证任何特定形式)的端点。 它接收到一个请求说:“验证abc@invalid.org”和它产生的说:“我看了看这个邮箱地址,我想请你告诉我不能得到无效有效的DNS响应用户的响应.ORG”。 如果人们不认为200响应是正确的在这里,我很想了解他们的推理。
虽然它是在一个提议的标准定义是, 422 Unprocessable Entity
是一个合适的状态。
的422(无法处理的实体)状态代码表示的服务器理解的内容类型的请求实体(因此一个415(不支持的媒体类型)状态代码是不适当的),并且所述请求实体的语法是正确的(因此400(错误的请求)状态码是不合适的),但无法处理所包含的指令。
例如,如果XML请求主体包含合式(即语法正确),可能会发生这种错误情况,但语义错误,XML指令。
参考文献:
- https://tools.ietf.org/html/rfc4918#section-11.2
- http://developer.github.com/v3/#client-errors
- https://stackoverflow.com/a/2657624/247702
- http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error
If the state of your HTTP resource is somewhere "between start and finish" to paraphrase your words on this admittedly older question, I would like to put a vote in for returning status 202. It has the advantage of being a 2-- "success" type response so a dumber client will not consider it a broken page, and its stated purpose in the HTTP 1.1 spec sounds like what you want (though many of the status code definitions are very ambiguous).
Specification Link
Excerpt:
202 Accepted
The request has been accepted for processing, but the processing has not been
completed. The request might or might not eventually be acted upon, as it
might be disallowed when processing actually takes place...
The 202 response is intentionally non-committal. Its purpose is to allow a server
to accept a request for some other process (perhaps a batch-oriented process
that is only run once per day) without requiring that the user agent's
connection to the server persist until the process is completed. The entity
returned with this response SHOULD include an indication of the request's
current status and either a pointer to a status monitor or some estimate of
when the user can expect the request to be fulfilled.
我想,只要你不滥用的东西,它的目的不是那么它真的可以归结为偏好和舆论代码。 409可能是好的,虽然我觉得我个人更喜欢200的验证错误作为响应用于验证失败。 我想,这使得开发人员更容易检查公共通信错误,如401或500,并与他们打交道,他们担心他们验证发送数据之前。