首页 > 解决方案 > 下游验证失败时的 Http 状态码

问题描述

我有一个对订单收费的 API。它接受 orderId 和金额作为输入。然后它向下游发出“/charge”调用,该调用返回 202。在此调用之后,它立即调用“/verify”端点以确保之前的收费成功。

现在可能会发生收费被拒绝的情况。造成这种情况的原因之一可能是用户使用了过期的卡。这种情况下的错误代码应该是什么?

  1. 正如我所看到的,我无法发送 4xx,因为请求对于我的 API 角度来说是正确的。错误的请求是用户可以更正的——在这种情况下,他无法更正任何东西,因为 API 只接受“orderId”和要收取的总金额。

  2. 如果我发送 5XX,那么 500 没有意义,因为这不是我服务器上的“意外情况”。我无法发送 503,因为我的服务器没有超载或停机进行维护。

目前,我正在发回一个 503,其中包含一个映射到的应用程序代码:付款验证失败。

标签: resthttpmicroservices

解决方案


服务器的响应必须始终在服务的域责任的上下文中

如果服务“接受”请求并且请求者(客户端)应该知道所有这些,并且域操作在后台异步执行,它应该返回 202

如果交互是同步的,您肯定会以错误响应,因为请求不成功。响应代码取决于域汇款。

根据您的服务,如果 api 接受请求中的标识符,导致付款失败,并且客户端有责任传递正确的标识符,那么您必须以 400 - BAD REQUEST 响应。

但是,如果 api 只是来自客户端的提示,要求您执行一些域操作,并且其中一个域操作失败;那么客户端就无能为力了,你必须返回一个5XX,因为它是一个服务失败

根据经验,500 通常用于不正常的错误场景。但是,如果您可以将此称为服务器错误,则返回 500

502 - 是一个 BAD GATEWAY,其中充当下游服务代理的域服务未能执行域操作。

请选择适合的


推荐阅读