下游提供无效数据时给客户端的 Http 状态码
Http status code to a client when downstream provides invalid data
有一种情况,为了满足 API 消费者的请求,我们正在回调消费者以获取额外数据,而额外数据可能无效。在那种情况下,我们应该使用 400 Bad Request HTTP 状态代码或 500 Internal Server 响应最佳实践是什么,因为我们收到了有效请求但由于错误状态而无法满足请求?
提前致谢。
可以根据服务将使用客户端提供的附加数据执行的操作来定义 HTTP 错误代码。如果它用于搜索操作,那么您可以使用 404 表示找不到资源,或者使用 400 表示格式错误或无效的数据。 5xx 系列本质上非常敏感,这意味着如果 5xx 返回,您的客户端可能会定义许多额外的工作流程,例如重试(标准或长),这可能会在处理实时数据时出现麻烦的问题。
如果请求本身的格式没有问题,但某些其他资源的状态有误,我认为有两种可能的思考方式:
- 如果客户负责“额外数据”,并且这是他们可以修复的东西,
409 Conflict
可能是最合适的。 409
有效地表明客户端发送的请求 将来 可能是正确的,如果 'Additional data' 的错误状态得到修复。
- 如果'Additional data'是客户无法控制的系统内部部分,我觉得
5xx
类错误是最正确的。请求很好,但内部问题导致它失败。客户不关心它是否涉及不同的系统。事实上,它确实是一个实现细节。
有一种情况,为了满足 API 消费者的请求,我们正在回调消费者以获取额外数据,而额外数据可能无效。在那种情况下,我们应该使用 400 Bad Request HTTP 状态代码或 500 Internal Server 响应最佳实践是什么,因为我们收到了有效请求但由于错误状态而无法满足请求?
提前致谢。
可以根据服务将使用客户端提供的附加数据执行的操作来定义 HTTP 错误代码。如果它用于搜索操作,那么您可以使用 404 表示找不到资源,或者使用 400 表示格式错误或无效的数据。 5xx 系列本质上非常敏感,这意味着如果 5xx 返回,您的客户端可能会定义许多额外的工作流程,例如重试(标准或长),这可能会在处理实时数据时出现麻烦的问题。
如果请求本身的格式没有问题,但某些其他资源的状态有误,我认为有两种可能的思考方式:
- 如果客户负责“额外数据”,并且这是他们可以修复的东西,
409 Conflict
可能是最合适的。409
有效地表明客户端发送的请求 将来 可能是正确的,如果 'Additional data' 的错误状态得到修复。 - 如果'Additional data'是客户无法控制的系统内部部分,我觉得
5xx
类错误是最正确的。请求很好,但内部问题导致它失败。客户不关心它是否涉及不同的系统。事实上,它确实是一个实现细节。