20

在正确使用 REST 时,请求成功但有警告消息时的 HTTP 状态码适合什么?

在我们的案例中;客户端是在浏览器上运行的 Web 应用程序。我们更喜欢如下状态码:

  • 成功处理请求时的 HTTP 200、201、204
  • 请求违反某些业务规则时的 HTTP 422
  • 处理请求时发生意外异常时的 HTTP 500

但是我们无法确定当请求成功处理时应该使用哪个状态码,但需要向客户端发送一些信息或警告消息?

4

3 回答 3

18

在 HTTP 协议中实际上有一个“警告”标头(请参阅标头字段定义)。这些是 HTTP 警告,但您可以使用代码 199 发送您需要的内容:

199 Miscellaneous warning 警告文本可以包含要呈现给人类用户或记录的任意信息。

这里的问题是下一个规范:

收到此警告的系统除了向用户显示警告外,不得采取任何自动操作。

因此,我认为您最好在响应内容中添加有关警告的数据(并继续使用 200 状态代码)。

于 2016-02-29T11:57:22.083 回答
1

HTTP 状态码用于确定请求是否已正确进行,并且没有警告状态。如果您想提供有关内部函数结果的信息,您应该在响应内容中添加信息状态,例如:

{
    status: "WARNING",
    code: "WARNING-CODE"
}
于 2016-02-29T07:57:38.297 回答
0

在类似的情况下,我使用了 HTTP 418(请参阅 HTCPCP

客户端是使用 Google Maps API 显示地图图块的 Web 应用程序。而且我想区分故意空白的磁贴(零数据 -> 使用 HTTP 200 的空白磁贴)和由丢失数据导致的空白磁贴(空数据 -> 使用 HTTP 418 的空白磁贴)。

返回 404 使我无法在响应正文中发送图块,并且会在地图上放置丑陋的符号。但是返回 418 仍然允许响应主体(可能是由于缺乏围绕 HTTP 418 的严格标准定义?),同时提供了一个状态代码,我可以轻松地在日志等中过滤以用于诊断目的。

于 2018-06-25T15:32:37.970 回答