Http状态代码412是否适合基于我们域中定义的规则的错误

时间:2013-11-29 14:15:06

标签: http rest asp.net-web-api http-status-codes http-status-code-412

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

凭证从第三方检索。

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

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

我想返回标准的HTTP错误。

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

1 个答案:

答案 0 :(得分:4)

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

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

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

  

422(不可处理实体)状态代码表示服务器   了解请求实体的内容类型(因此a   415(不支持的媒体类型)状态代码不合适),和   请求实体的语法是正确的(因此是400(错误请求)   状态代码不合适但是无法处理包含的内容   说明。例如,如果是XML,则可能会出现此错误情况   请求正文包含格式正确(即语法正确),但是   语义错误的XML指令。

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