【问题标题】:Http Status Code 400 vs 412Http 状态码 400 与 412
【发布时间】:2012-05-30 15:29:13
【问题描述】:

所以我正在开发一个 Rest API

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

400 - 错误请求

412 - 前提条件失败

为什么?

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

  • 它还指出由于 400 的语法格式错误,无法完成请求。
  • 这个页面真的帮助了我 - odino.org/… - 使用“PUT”请求上下文让我更容易理解它的用途,因为滥用某些状态代码总是很容易。
【解决方案2】:

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

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

请参阅此link,了解有关前置条件标头的一些说明。

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

If-None-Match 告诉服务器仅在 Etag与客户端发送的不同。

【讨论】:

  • 认为某人度过了糟糕的一天。忽略它,让系统完成它的工作:)
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多