Http状态代码400与412

时间:2012-05-24 03:43:18

标签: api http rest http-status-code-400 http-status-code-412

所以我正在开发一个Rest API

当创建一个POST来创建资源并且缺少必填字段时我应该返回什么?

400 - 错误请求

OR

412 - 前提条件失败

为什么?

3 个答案:

答案 0 :(得分:35)

如果请求参数错误,请使用400。如果其中一个If-*请求标题(如If-MatchIf-Modified-Since等)错误,请使用412.

为什么呢?这正是RFC所说的。例如,参见If-Match规范的摘录:

  

如果没有实体标签匹配,或者如果给出“*”并且不存在当前实体,则服务器必须不执行所请求的方法,并且必须返回412(Precondition Failed)响应。当客户端想要阻止更新方法(如PUT)修改自客户端上次检索它以来已更改的资源时,此行为最有用。

答案 1 :(得分:16)

当您的服务器不满足客户端指定的条件时,将使用

412。

在你的情况下,你应该使用400.这只是一个糟糕的要求。

有关前置条件标题的一些说明,请参阅此link

  

Etag标头通常是表示我们资源的字符串   在HTTP标头中。你要求一个If-Match是a的资源   前置HTTP标头。如果它不匹配,它将发送412   您发送的代码。

     

If-None-Match告诉服务器只处理完整的响应   Etag与客户发送的不同。

答案 2 :(得分:4)

您可以使用状态代码422.如果您不想,400则可以。