3

我有一个返回Voucher对象的 api 端点。

代金券是从第三方取回的。

我们会检查/验证某些条件,例如过期日期。
因此,如果客户端应用程序请求/voucher/1234从第三方检索 ID 为 1234 的凭证。

如果过期日期是 < 现在,我们需要返回一个错误。

我想返回标准的 HTTP 错误。

哪个最合适?
我最初认为是 412,但现在我不确定。

4

1 回答 1

5

当服务器不满足请求标头中提供的前提条件之一(If-Match、If-Modified-Since 等)时,使用 HTTP 412。

非常通用的方法是在无效字段上返回 HTTP 400 + 特定错误消息。

然而,越来越多的流行 API 开始使用 HTTP 扩展来更精细地向客户端提供错误反馈。Twitter 和 GitHub 使用 WebDAV HTTP 扩展中定义的 HTTP 422 Unprocessable Entity。HTTP 422 说:

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

您的服务器了解用户想要做什么并了解数据包含的内容,它只是不允许您这样做。所以,Http 422 看起来很适合你。

于 2013-11-29T14:31:05.887 回答