在正确使用 REST 时,请求成功但有警告消息时的 HTTP 状态码适合什么?
在我们的案例中;客户端是在浏览器上运行的 Web 应用程序。我们更喜欢如下状态码:
- 成功处理请求时的 HTTP 200、201、204
- 请求违反某些业务规则时的 HTTP 422
- 处理请求时发生意外异常时的 HTTP 500
但是我们无法确定当请求成功处理时应该使用哪个状态码,但需要向客户端发送一些信息或警告消息?
在正确使用 REST 时,请求成功但有警告消息时的 HTTP 状态码适合什么?
在我们的案例中;客户端是在浏览器上运行的 Web 应用程序。我们更喜欢如下状态码:
但是我们无法确定当请求成功处理时应该使用哪个状态码,但需要向客户端发送一些信息或警告消息?
在 HTTP 协议中实际上有一个“警告”标头(请参阅标头字段定义)。这些是 HTTP 警告,但您可以使用代码 199 发送您需要的内容:
199 Miscellaneous warning 警告文本可以包含要呈现给人类用户或记录的任意信息。
这里的问题是下一个规范:
收到此警告的系统除了向用户显示警告外,不得采取任何自动操作。
因此,我认为您最好在响应内容中添加有关警告的数据(并继续使用 200 状态代码)。
HTTP 状态码用于确定请求是否已正确进行,并且没有警告状态。如果您想提供有关内部函数结果的信息,您应该在响应内容中添加信息状态,例如:
{
status: "WARNING",
code: "WARNING-CODE"
}
在类似的情况下,我使用了 HTTP 418(请参阅 HTCPCP)
客户端是使用 Google Maps API 显示地图图块的 Web 应用程序。而且我想区分故意空白的磁贴(零数据 -> 使用 HTTP 200 的空白磁贴)和由丢失数据导致的空白磁贴(空数据 -> 使用 HTTP 418 的空白磁贴)。
返回 404 使我无法在响应正文中发送图块,并且会在地图上放置丑陋的符号。但是返回 418 仍然允许响应主体(可能是由于缺乏围绕 HTTP 418 的严格标准定义?),同时提供了一个状态代码,我可以轻松地在日志等中过滤以用于诊断目的。