我正在构建一个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服务,它将这些请求代理到内部服务。但我们并不一定希望向客户公开此实施细节。
哪个最合适/最不好?还是我应该考虑另一个?
答案 0 :(得分:1)
如果您想表明它是服务器端错误而用户可以重试请求 - 请使用 5xx
但在你看来你想对用户your query is too big, change it before retrying
说,你应该使用 4xx
所以,我选择400 Bad Request
。