请求耗时太长时要使用哪个HTTP响应代码?

时间:2018-02-23 03:47:30

标签: api http http-status-codes

我正在构建一个API,对我们正在存储的非常大的数据库进行分析。有些请求需要很长时间才能处理。我们希望主动中止超过10分钟的请求,但是在我们尝试之前,我们不知道请求是否需要很长时间。大多数情况下,这不是因为瞬态服务器过载。用户提出了涉及如此多数据的请求,我们无法快速完成这些数据。

我已经搜索了list of standard HTTP response codes,但我找不到一个显然适合的人:

  • 409 Conflict - 也许吧?用户可以更改其请求以涉及较小的数据集。但我们觉得这更像是服务器问题,而不是客户问题。

  • 422 Unprocessable Entity - 也许吧?我们将此用于其他验证错误,例如错误的日期格式或数据集名称。但在这种情况下,它并不是真正的客户端错误。

  • 其他400级代码 - 这不是错误请求或身份验证问题。我们认为我们为请求提供服务但我们无法做到。

  • 500 Internal Server Error - 也许这个?但感觉太普通了。这就是错误和意外问题。

  • 501 Not Implemented - 也许吧?我们还没有实现对涉及过多数据的请求的支持。但RFC似乎意味着这是因为没有实现请求方法。但这种方法不是问题所在。

  • 503 Service Unavailable - 但问题通常不是暂时的。重复请求很可能会因同样的问题而失败。

  • 504 Gateway Timeout - 从技术上讲,这可能是有效的,因为我们有一个面向公众的API服务,它将这些请求代理到内部服务。但我们并不一定希望向客户公开此实施细节。

哪个最合适/最不好?还是我应该考虑另一个?

1 个答案:

答案 0 :(得分:1)

如果您想表明它是服务器端错误而用户可以重试请求 - 请使用 5xx

但在你看来你想对​​用户your query is too big, change it before retrying说,你应该使用 4xx

所以,我选择400 Bad Request