【问题标题】:In what circumstances a REST API should return HTTP Status 503在什么情况下 REST API 应该返回 HTTP 状态 503
【发布时间】:2017-07-08 03:39:07
【问题描述】:
【问题讨论】:
标签:
rest
http-status-code-503
【解决方案1】:
假设服务遇到数据库争用。没有关于服务器必须做什么的规则。但是,如果您认为问题是暂时的并且会在一段时间后得到解决,您可以选择返回 503。您可以指定 Retry-After 标头以通知调用者何时可以重试。这对于允许调用者自动从问题中恢复特别有用。您可以将它用于其他一些场景,并且调用者可以在指定时间段后自动重试。
状态码有两个用途
- 让来电者知道发生了什么
- 让来电者知道他接下来可以做什么
向呼叫者发送带有 Retry-After 的 503 为呼叫者提供了比发送 500 更多的选项。当然,呼叫者可以完全忽略 Retry-After 并将其视为 500,但您作为服务提供商是提供更多信息和选项。
【解决方案2】:
The updated spec,供参考。
如果服务器在数据库访问级别存在锁冲突,在这种情况下服务器是否应该返回 503
请记住,在 REST 模型中,HTTP 状态码不是用来描述服务中的问题;他们改为描述文档存储中的类似条件。
503 是文档存储说“我太忙了,稍后再试”的方式。
在什么其他情况下返回 HTTP 状态 503 是有意义的。
背压。来自Martin Thompson
应用背压是应对持续高负载的一种有效技术,这样可以在不降低已接受请求和事务的系统性能的情况下提供最大吞吐量。
当我们需要支持 REST 等同步协议时,请使用背压(由网关处的完整传入队列发出信号)发送有意义的“服务器繁忙”消息,例如 HTTP 503 状态代码