【发布时间】:2012-05-30 15:29:13
【问题描述】:
所以我正在开发一个 Rest API
当一个 POST 用于创建资源并且缺少必填字段时,我应该返回什么?
400 - 错误请求
或
412 - 前提条件失败
为什么?
【问题讨论】:
标签: api http rest http-status-code-400 http-status-code-412
所以我正在开发一个 Rest API
当一个 POST 用于创建资源并且缺少必填字段时,我应该返回什么?
400 - 错误请求
或
412 - 前提条件失败
为什么?
【问题讨论】:
标签: api http rest http-status-code-400 http-status-code-412
如果请求参数错误,则使用 400。如果If-* 请求标头(如If-Match、If-Modified-Since 等)之一错误,请使用 412。
为什么?这正是 RFC 所说的。例如,请参阅If-Match 规范的摘录:
如果没有一个实体标签匹配,或者如果给出了“*”并且没有当前实体存在,服务器不能执行请求的方法,并且必须返回一个 412(Precondition Failed)响应。当客户端想要阻止更新方法(例如 PUT)修改自客户端上次检索后已更改的资源时,此行为最有用。
【讨论】:
当你的服务器不满足客户端指定的条件时使用412。
在您的情况下,您应该使用 400。这只是一个错误的请求。
请参阅此link,了解有关前置条件标头的一些说明。
Etag 标头通常是一个字符串,代表我们的资源 在 HTTP 标头中。你请求一个带有 If-Match 的资源是 前置条件 HTTP 标头。如果不匹配,它将发送 412 您发送的代码。
If-None-Match 告诉服务器仅在 Etag与客户端发送的不同。
【讨论】:
您可以使用状态码 422。如果您不想使用,400 也可以。
【讨论】: