【发布时间】:2019-03-11 16:05:05
【问题描述】:
假设我有一个 API 端点,它执行一些业务操作,这可能导致许多不直接连接到请求的不同故障。
请求格式正确,我无法返回 4xx 失败,但应用程序的逻辑要求我返回不同的错误消息。
现在我希望客户端能够区分这些错误消息,以便可以根据代码采取不同的操作。我可以像这样返回自定义 JSON,例如
{
"code": 15,
"message": "Some business error has occurred"
}
现在的问题是,如果没有像 Conflict 或 NotFound 这样的标准代码有意义,我应该在这种情况下使用哪种 HTTP 状态代码。
似乎 500 InternalServerError 是合乎逻辑的,但是我怎么能另外标记这不能重试,如果它只是记录给定的状态代码是不可能重试的,所以如果你没有得到可以重试其中之一?
【问题讨论】:
-
是什么让你认为你不能使用 4xx?另外,你见过greenbytes.de/tech/webdav/rfc7807.html>吗?
-
对于格式错误/无效的请求不是 4xx 吗?如果请求通过验证但以后无法执行,那么我猜它是 5xx 之一?
-
我猜@JulianReschke 正在向
422 Unprocessable Entity响应代码(tools.ietf.org/html/rfc4918#section-11.2)的方向轻推您,其内容类型为application/problem+json,但我没有想把话放在嘴里。
标签: http api-design http-status-codes