http-error - 更正外部服务中重复文档的 HTTP 状态
问题描述
我正在为继承服务开发 api 网关服务,客户将支付订单发送到网关,网关将订单发送到遗留服务。每个付款订单都带有一个跟踪密钥,旧服务使用此密钥检查订单是否重复。如果订单重复,旧服务会向我发送状态 200,我需要在响应中查找错误属性,但客户端可以更改跟踪键并重试,所以我正在考虑更改该错误的响应在网关中并且没有成功响应,但是我不确定这是否是正确的方法以及向客户端抛出什么错误,一开始我在考虑 BadGatewayException,因为错误在遗留服务中。
解决方案
我认为 409 的 Http 状态代码适合这种情况,因为您正在尝试创建服务器上已经存在的订单。由于用户更改跟踪 ID 解决了冲突,我会说返回 409。
请参阅文档以获取 HTTP 状态代码 409
由于与资源的当前状态冲突,无法完成请求。仅在预期用户可能能够解决冲突并重新提交请求的情况下才允许使用此代码。响应正文应该包含足够的信息让用户识别冲突的来源。理想情况下,响应实体将包含足够的信息供用户或用户代理解决问题;但是,这可能是不可能的,也不是必需的。冲突最有可能在响应 PUT 请求时发生。例如,如果正在使用版本控制并且被 PUT 的实体包括对资源的更改,这些更改与早期(第三方)请求所做的更改相冲突,则服务器可能会使用 409 响应来指示它无法完成请求. 在这种情况下,
参考:HTTP 状态代码定义
推荐阅读
- php - Laravel 中的 Psr-4 已弃用通知
- flutter - 仍然有未处理的异常:GSheetsException:调用者没有权限
- llvm - 如果根据定义它不带参数,为什么 llvm::FunctionType(Type*, bool) 具有 bool ?
- python - 如何将json文件中的句子连接成一个文本?
- python - 无法在python中使用for循环遍历列表
- pdf - 使用 Python 3.7 在 SharePoint 页面上读取 PDF 时出错
- python - Jupyter 笔记本环境
- gitlab - Gitlab CI 共享运行器无法启动
- tfs - Azure devops 拉取请求中的 Sonarqube Quality Gate 状态链接始终指向 localhost
- mysql - 当本地 MySql 没有使用 ADF 参考的日期字段时,如何将增量数据从本地 MySql 复制到 Azure MySql