2012-05-24 74 views
20

所以我正在开发一个REST APIHttp状态代码400 VS 412

当柱子是创建资源和必填字段丢失该怎么回报?

400 - 错误的请求

OR

412 - 前提条件失败

,为什么?

回答

28

使用400如果请求参数是错误的。如果其中一个If-*请求标头If-Match,If-Modified-Since等其中一个是错误的,请使用412。

为什么?这正是RFC所说的。例如见这种提取物If-Match规格:

如果没有实体标签匹配,或者如果“*”,并给出当前没有实体存在,服务器不能执行所请求的方法,并且必须返回一个412 (先决条件失败)响应。当客户端要阻止更新方法(如PUT)修改自客户端上次检索到的资源时发生更改时,此行为非常有用。

+1

它还表示,由于400的语法格式不正确,请求无法实现。 – Rob

+1

本页帮助我 - http://odino.org/don-t-rape-http-if-none-match-the- 412-http-status-code/- 使用'PUT'请求上下文使我更容易理解它的用途,因为滥用某些状态码总是容易的。 – Charlie

12

412当您的服务器不符合客户端指定的条件时使用。

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

请参阅此link了解有关预处理标题的一些说明。

Etag标头通常是一个字符串,代表我们在HTTP标头中的资源 。您要求具有If-Match的资源是一个 预先规定的HTTP标头。如果它不符合您发送的代码 ,它将发送一个412。

如果-None-Match通知服务器仅当 Etag与客户端发送的Etag不同时才处理整个响应。

+0

为什么downvote?答案有什么问题? – nunespascal

+4

认为有人度过了一个糟糕的一天。只要忽略它,让系统完成它的工作:) – BalusC

+0

有一个upvote来平衡它。 –

3

你可以使用状态码422.如果你不想,400是好的。