可以说我有一个执行某些业务操作的API端点,这可能导致许多不同的失败,这些失败没有直接连接到请求。
请求格式正确,我无法返回4xx错误,但是应用程序的逻辑要求我返回不同的错误消息。
现在,我希望客户端能够区分这些错误消息,以便可以根据代码采取不同的操作。我可以像这样返回自定义JSON
{
"code": 15,
"message": "Some business error has occurred"
}
现在的问题是,如果没有像Conflict
或NotFound
这样的标准代码有意义,我应该在这种情况下使用哪种HTTP状态代码。
似乎500 InternalServerError
是合乎逻辑的,但是我应该如何另外标记这是不能重试的,如果只是记录在案,则无法重试给定的状态码,因此如果您不这样做,可以重试不能得到其中之一?
答案 0 :(得分:-1)
咨询RFC 7231:
503服务不可用 看起来像一个潜在的候选者,但是RFC提到这被认为是一个问题,“可能会在某些延迟后得到缓解。”这将向客户表明它可以稍后再尝试相同的呼叫,可能是在工作时间之后或在周末。这不是你想要的。
501未实现是可能的,但是RFC提到“ 当服务器无法识别 请求方法,并且不支持任何资源。默认情况下,501响应是可缓存的;“这里似乎不是这种情况-HTTP方法本身是有效的-这里的失败似乎发生在业务规则层(例如,发送一个不在数据库中的帐号),而不是您从未实现的HTTP方法(GET,POST等)。
剩下最后一个认真的候选人,
500内部服务器错误
500(内部服务器错误)状态代码表示服务器 遇到意外状况,无法实现 请求。
这是通常用于一般性“应用程序中发生异常”情况的错误代码。 500是最佳选择。
关于如何将其与“暂时性内部故障”错误区分开来,您可以将其作为HTTP body的一部分-只需确保您的客户端可以解析出自定义代码即可!