MoteCMS
菜单

MoteCMS field notes

接口重试时,怎样避免多出一篇文章

幂等键解决重复副作用,版本号保护已经发生的新修改。

超时不等于没有发生

创建文章的请求超时,服务器可能已经完成写入,只是响应没有到达客户端。立刻发送一个全新的创建请求,就可能产生重复内容。重试需要保持同一个操作身份,而不是把同一意图伪装成另一次操作。

幂等键对应一次明确意图

客户端为一次创建或任务提交生成稳定的幂等键。同一次操作重试,保持相同方法、路径、请求体与版本条件。修改了字段,就已经是另一项意图,应使用新的键。不要把一个键永久绑定某个按钮或文章。

幂等不能替代版本检查

重试保护的是重复副作用,乐观锁保护的是并发修改。Agent 读取文章后,另一个操作可能已经更新它。此时旧修改应产生冲突,而不是静默覆盖。重新读取的目的,是重新比较变化,不是机械地获取一个能通过校验的新版本号。

已提交的任务,先查询

发布请求已经返回任务标识后,后续应查询该任务的终态。页面暂时没有变化,可能只是任务还在执行。无条件追加新的发布任务,会增加负担并模糊结果。

可靠重试需要同时回答:这是不是同一次操作、目标记录有没有变化、后台工作是否已经开始。三个问题各有对应机制,不能混为一谈。

← 返回资源中心继续阅读专题 →