rest - 从客户端的角度看幂等键
问题描述
假设我有一个 API 调用称为/charge
(POST) 的下游服务的 API。假设在进行充电时,反向代理发生超时,我得到了一个5xx
. 但指控确实发生了。
在这种情况下,我会回复5xx
我的消费者。现在,如果消费者使用相同的幂等键调用,那么他的请求可以成功,因为下游服务将返回响应的缓存副本。但是,如果他在调用我的 API 时使用不同的幂等密钥,他将继续获得409s
,因为付款已经被收取。
这是我的两个问题:
客户端如何知道何时使用相同的 idempotentId 重试或完全发起新请求?
(补充上一个问题)UI如何决定使用不同的幂等ID?每个新请求是否包含一个新的 Id,并且只有重试逻辑重用相同的 Id?
基本上,我试图从客户的角度理解幂等键。
解决方案
在向用户返回失败响应之前,应自动重试几次超时。因此,如果错误是暂时的,用户将不会注意到任何问题(除了可能可以忽略不计的响应延迟)。
请求发起系统应维护所有请求及其状态的日志。因此,如果故障持续时间较长,系统可以定期重试失败的请求,并向用户提供提交请求的详细 UI 视图。这消除了用户重试请求的需要。系统将代表用户执行此操作。
推荐阅读
- flutter - 侦听错误的 Flutter Provider,但仍然收到错误“setState() 或 markNeedsBuild() 在构建期间调用。”
- javascript - 检查 discord.js 机器人权限
- javascript - 如何将 API 数据获取到单独的 HTML 页面
- c# - 如何使用 LINQ 对包含当前数据的特定列求和
- sql - 跨多个列 PostgreSQL/Rails 的慢速通配符搜索 LIKE
- python - Python 中 += 运算符的意外行为
- python - 如何增加 NumPy 数组的维度
- kubernetes - argocd:如何在 crd 中使用插件?
- javascript - React JS:如何实现类似gmail新消息窗口的弹窗
- python-3.x - 列表理解有效,但正常的 for 循环无效 - Python