降级健康检查的HTTP状态代码应该是什么?

Muh*_*eed 7 http health-monitoring http-status-codes http-status-code-503 kubernetes-health-check

我有一个运行状况检查端点/status返回以下状态代码和响应正文:

  • 健康 - 200 OK
  • 退化 - ?
  • 不健康 - 503 Service Unnavailable

HTTP状态代码对于降级响应应该是什么?"降级"检查用于成功但速度缓慢或不稳定的检查.什么HTTP状态代码最有意义?

mbj*_*mbj 9

来自健康端点的“降级”状态响应的最合适的 HTTP 状态代码就是200 OK.

我这样说是因为我在IANA 维护的官方超文本传输​​协议 (HTTP) 状态代码注册表中找不到任何更好的代码,由[RFC7231] HTTP/1.1: Semantics and Content指出。应避免使用非官方代码,因为它们只会使您的 API 更难以理解。

您应该设计您的 API,使其易于使用。资源名称、HTTP 动词、状态代码等应该或多或少是不言自明的,以便已经了解“REST 语言”的人可以立即了解如何使用您的 API,而无需破译模糊的名称或不寻常的状态代码。这让我进入了答案的下一部分......

关于您的设计的其他评论

解释5xx对任何请求的响应的最自然方式是相关操作失败。

所以503 Service UnavailableGET /status请求的响应意味着状态检查操作本身失败了。正如Nkosi 的回答中提到的API 健康检查草案中所指出的那样,只有在我们可以确定这/status是一个健康端点时,这样的响应才会有用:

运行状况端点仅在它指示其运行状况的组件的上下文中才有意义。它没有其他意义或目的。因此,它的健康状况是组件健康状况的管道。客户端应该假设健康端点返回的 HTTP 响应代码适用于整个组件(例如更大的 API 或微服务)。

但是对于 URL 路径 just /status,这是否真的一个健康端点并不完全明显。通过查看 URL,我们只知道它返回有关某物状态的信息,但我们无法确定“某物”是什么。

由于您还告诉我们是的,它实际上是一个健康端点,我必须建议您将名称更改为health. 我还建议将它放在某个基本路径下,例如/things/health,使其更清楚它指示哪个组件的健康状况。

另一方面,如果/status它实际上是它自己的资源,即代表某个其他组件/事物状态的事物(如其名称目前所暗示的那样),那么这200 OK是成功调用的唯一合理状态,即使事物它表示状态为“不健康”。在这种情况下,a5xx将意味着无法获得任何状态,并且响应负载中的详细信息将被假定为与/status服务本身的故障有关。

所以要小心你如何命名事物以及你使用什么状态代码!