REST API在什么情况下应该返回HTTP状态码503?

5
标准规定:
10.5.4 503服务不可用。由于服务器临时过载或维护,服务器当前无法处理请求。这意味着这是一个暂时的条件,在一段时间后将得到缓解。
参考:https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 如果服务器在数据库访问级别上存在锁争用,是否应在这种情况下返回503状态码?或者503状态码是指:
  • 网络超载
  • DOS类型情况
  • 负载均衡达到最大值
  • 明确的维护窗口。
还有哪些情况需要返回HTTP状态码503?
非常感谢任何详细的澄清。
2个回答

3
假设服务在数据库上遇到争用。没有规定服务器必须执行什么操作。然而,如果您认为问题是暂时的,并且将在一段时间后得到解决,您可以选择返回503。您可以指定 Retry-After头以告知调用者何时可以重试。这对于允许调用者自动从问题中恢复非常有用。您也可以将其用于其他一些场景,因为调用者可以在指定的时间段后自动重试。
状态代码有两个目的:
1. 让调用者知道发生了什么。
2. 告诉调用者下一步该怎么做。
向调用者发送带有Retry-After的503提供了比发送500更多的选项。当然,调用者可以完全忽略Retry-After并将其视为500,但作为服务提供商,您提供了更多的信息和选项。

2

参考更新规范

如果服务器在数据库访问层面遇到锁争用,是否应该在这种情况下返回503?

请记住,在REST模型中,HTTP状态码不是用于描述服务中的问题,而是描述文档存储中的类似情况。

503是文档存储表示“我很忙,请稍后重试”的方式。

还有哪些情况需要返回HTTP状态码503?

背压。来自Martin Thompson

应用背压是应对持续高负载的一种有效技术,可以在不降低已接受请求和事务的系统性能的情况下提供最大吞吐量。

当我们需要支持同步协议(如REST)时,使用背压,在网关处发送有意义的“服务器繁忙”消息,例如HTTP 503状态码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接