我不清楚什么时候应该和不应该返回 HTTP 412: Precondition Failed, error for a web service?我正在考虑在验证数据时使用它。例如,如果客户端 POST 的 XML 数据并且该数据缺少必需的数据元素,则响应 412 和错误描述。
这是否符合响应 HTTP 412 的精神,还是应该使用其他东西(例如另一个 http 错误代码或 Web 应用程序异常)?
我不清楚什么时候应该和不应该返回 HTTP 412: Precondition Failed, error for a web service?我正在考虑在验证数据时使用它。例如,如果客户端 POST 的 XML 数据并且该数据缺少必需的数据元素,则响应 412 和错误描述。
这是否符合响应 HTTP 412 的精神,还是应该使用其他东西(例如另一个 http 错误代码或 Web 应用程序异常)?
如果您查看RFC 2616,您会看到许多可用于将条件应用于请求的请求标头:
If-Match
If-Modified-Since
If-None-Match
If-Range
If-Unmodified-Since
这些标头包含“先决条件”,允许客户端告诉服务器仅在满足某些条件时才完成请求。例如,您使用PUT
请求来更新资源的状态,但您只希望在PUT
资源自您最近的GET
.
412
当这些先决条件失败时,通常使用响应状态代码(Precondition Failed)。
您的示例听起来像是一个无效请求(即客户端提交了由于缺少值而无效的数据)。(Bad Request)的状态代码在400
这里更适合 IMO。
412 保留用于请求有条件且不满足条件的情况。
对于您的用例,422 Unprocessable Entity是一个很好的匹配。
最好的办法是避免 412。实际上,我使用的大多数 Web 服务都会发送400 代码 (Bad Request)。许多框架也内置了对 400 的支持,您的客户会喜欢更常见的错误代码。很多时候,特别是对于 REST 接口,一个简单的“消息”或“错误”元素会返回一个描述。