31

所以我正在开发一个 Rest API

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

400 - 错误请求

或者

412 - 前提条件失败

为什么?

4

3 回答 3

42

如果请求参数错误,请使用 400 。如果,等If-*请求标头之一错误,请使用 412 。If-MatchIf-Modified-Since

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

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

于 2012-05-24T03:50:58.690 回答
18

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

在您的情况下,您应该使用 400。这只是一个错误的请求。

有关前置条件标头的一些说明,请参阅此链接。

Etag 标头通常是一个字符串,它代表我们在 HTTP 标头中的资源。您请求具有 If-Match is a preconditional HTTP header 的资源。如果它与您发送的代码不匹配,它将发送 412。

If-None-Match 告诉服务器仅当 Etag 与客户端发送的不同时才处理整个响应。

于 2012-05-24T03:51:53.147 回答
4

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

于 2013-03-21T07:13:34.370 回答