【问题标题】:Is Http status code 412 suitable for error based on rules defined in our domainHttp 状态码 412 是否适合基于我们域中定义的规则的错误
【发布时间】:2013-11-29 14:15:05
【问题描述】:
我有一个返回 Voucher 对象的 api 端点。
凭证是从第三方获取的。
我们会检查/验证某些条件,例如过期日期。
因此,如果客户端应用程序请求 /voucher/1234 的凭证,ID 为 1234 的凭证将从第三方检索。
如果过期日期是
我想返回标准 HTTP 错误。
哪个最合适?
我最初以为是 412,但现在我不确定了。
【问题讨论】:
标签:
http
rest
asp.net-web-api
http-status-codes
http-status-code-412
【解决方案1】:
当服务器不满足请求标头中提供的前提条件之一(If-Match、If-Modified-Since 等)时,使用 HTTP 412。
非常通用的方法是在无效字段上返回 HTTP 400 + 特定错误消息。
然而,越来越多的流行 API 开始使用 HTTP 扩展,以便更精细地向客户端提供错误反馈。 Twitter 和 GitHub 使用 WebDAV HTTP 扩展中定义的 HTTP 422 Unprocessable Entity。 HTTP 422 says that :
422 (Unprocessable Entity) 状态码表示服务器
理解请求实体的内容类型(因此
415(不支持的媒体类型)状态码不合适),并且
请求实体的语法是正确的(因此是 400 (Bad Request)
状态码不合适)但无法处理包含的
指示。例如,如果 XML
请求正文包含格式正确(即语法正确),但是
语义错误的 XML 指令。
您的服务器了解用户想要做什么并了解数据包含的内容,但它不会让您这样做。所以,Http 422 看起来很适合你。