rest - 下游验证失败时的 Http 状态码
问题描述
我有一个对订单收费的 API。它接受 orderId 和金额作为输入。然后它向下游发出“/charge”调用,该调用返回 202。在此调用之后,它立即调用“/verify”端点以确保之前的收费成功。
现在可能会发生收费被拒绝的情况。造成这种情况的原因之一可能是用户使用了过期的卡。这种情况下的错误代码应该是什么?
正如我所看到的,我无法发送 4xx,因为请求对于我的 API 角度来说是正确的。错误的请求是用户可以更正的——在这种情况下,他无法更正任何东西,因为 API 只接受“orderId”和要收取的总金额。
如果我发送 5XX,那么 500 没有意义,因为这不是我服务器上的“意外情况”。我无法发送 503,因为我的服务器没有超载或停机进行维护。
目前,我正在发回一个 503,其中包含一个映射到的应用程序代码:付款验证失败。
解决方案
服务器的响应必须始终在服务的域责任的上下文中
如果服务“接受”请求并且请求者(客户端)应该知道所有这些,并且域操作在后台异步执行,它应该返回 202
如果交互是同步的,您肯定会以错误响应,因为请求不成功。响应代码取决于域汇款。
根据您的服务,如果 api 接受请求中的标识符,导致付款失败,并且客户端有责任传递正确的标识符,那么您必须以 400 - BAD REQUEST 响应。
但是,如果 api 只是来自客户端的提示,要求您执行一些域操作,并且其中一个域操作失败;那么客户端就无能为力了,你必须返回一个5XX,因为它是一个服务失败
根据经验,500 通常用于不正常的错误场景。但是,如果您可以将此称为服务器错误,则返回 500
502 - 是一个 BAD GATEWAY,其中充当下游服务代理的域服务未能执行域操作。
请选择适合的
推荐阅读
- java - JavaFX 14 中的通知
- javascript - 如何检测嵌入然后重新发送它(discord.js)
- azure-devops - 我们如何为 Azure DevOps 组织准备图表
- java - 从两个 Firebase 数据库表中获取所有数据
- r - 如何在 R 中更改 ggplot 中轴标签的位置?
- javascript - 如何在 .html 中添加 jQuery CDN 链接?
- django - 域名更改回静态 IP
- html - 如何让你的 flexbox 在移动设备上悬停和灵活
- scala - 猫中 foldLeft 和 foldRight 的区别
- python - 在反转数组的情况下,如何修复“标量变量的索引无效”错误