请求成功但有警告消息时,合适的HTTP状态代码是什么?

时间:2016-02-29 07:48:09

标签: rest http-status-codes json-api http-status

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

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

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

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

3 个答案:

答案 0 :(得分:7)

在HTTP协议中,实际上有一个“警告”标题(参见Header Field Definitions)。 这些是HTTP警告,但您可以使用代码199发送所需内容:

  

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

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

  

除此之外,接收此警告的系统不得采取任何自动操作   向用户提出警告。

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

答案 1 :(得分:1)

HTTP状态代码确定请求是否已正确进行且没有警告状态。如果要提供有关内部函数结果的信息,则应将信息状态添加到响应内容中,例如:

{
    status: "WARNING",
    code: "WARNING-CODE"
}

答案 2 :(得分:0)

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

客户端是使用Google Maps API来显示地图图块的网络应用。我想要区分故意空白的图块(零数据->使用HTTP 200的空白图块)和因缺少数据而产生的空白图块(空数据->使用HTTP 418的空白图块)。

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