Skip to main content

规格 · 幂等与一致性

适用范围​

约束所有变更类操作的幂等身份、重放窗口与冲突处理。

不约束:只读接口;幂等身份的生成算法;存储实现。

规范条款​

幂等身份​

  1. 每个变更类操作必须有幂等身份,且必须由调用方生成。
  2. 幂等身份必须满足:每次尝试唯一、不跨进程复用、在重放窗口内稳定。
  3. 幂等身份必须位于请求语义内;必须不仅存在于传输头(必须遵循API 与传输)。
  4. 服务端必须在应用任何变更之前完成幂等判定。

重放语义​

  1. 同幂等身份 + 同规范化请求体 → 必须返回同一结果,且必须不重复应用变更。
  2. 同幂等身份 + 不同请求体 → 必须冲突失败,必须不执行任一版本。
  3. 规范化必须有确定规则(字段顺序、空值、等价表示),且必须在文档中声明依据。
  4. 重放必须返回冻结的原响应或等价结果;必须不因当前状态变化而返回不同语义。

重放窗口​

  1. 每个可能返回"无工作"类结果的接口必须声明有界重放窗口;必须不承诺无限期重放。
  2. 窗口内同身份重放必须得到同一回答;窗口外必须要求调用方换新身份。
  3. 窗口长度必须是显式声明的参数(必须遵循非功能基线的统一口径)。

冲突与优先级​

  1. 冲突必须分类且必须给出明确优先级:
冲突优先级必须的行为
期望修订不符(状态冲突)高本次提交未生效;先同步当前状态
结果冲突(已存在不同终态)高停止;不得覆盖
身份 / 租约冲突高不抢占;失约方先收束
同身份异内容中冲突失败,不执行任一版本
  1. 必须不存在"后写覆盖先写"的路径;正确性必须靠期望修订或幂等身份保证。

跨系统一致性​

  1. 涉及外部副作用的操作必须保留确定性的业务操作标识,用于对账与去重。
  2. 副作用已发出但确认丢失时,必须先对账再决定是否重做;必须不因"本次是新运行"就重复不可逆副作用。
  3. 不可核对或不可逆的操作必须标记为需要人工处理,必须不进入自动重试。

自动重试​

  1. 自动重试必须只覆盖窄类操作:只读类、上游支持幂等键的写类、能通过稳定逻辑键接管既有结果的写类。
  2. 逻辑键必须基于业务要素(作用域 + 对象 + 动作 + 输入标识 + 效果类型);必须不只基于本次执行的标识。
  3. 必须不存在无限自动重试;必须有次数或时间上界,且上界必须显式声明。

违反时的失败语义​

违反情形必须的行为
变更类操作无幂等身份视为规格违反;评审阶段必须拦截
幂等判定晚于变更必须改为变更前判定
同身份异内容被执行视为规格违反
承诺无限重放必须改为有界窗口
后写覆盖先写必须改为期望修订保护
不可逆操作进入自动重试必须移出并标记人工处理

校验方式​

校验对象判据失败表现
幂等完备每个变更类操作必须能定位到幂等身份来源缺失即失败
重放不变更同身份同体重放不得产生第二次变更产生即失败
异体冲突同身份异体必须冲突且不执行执行即失败
窗口边界窗口外同身份重放必须被拒绝或要求换身份仍接受即失败
冲突优先级构造状态冲突与结果冲突,行为必须与优先级表一致不一致即失败
覆盖防护以陈旧修订提交必须失败成功即失败
对账要求不可逆操作必须能定位到业务操作标识缺失即失败
自动重试上界必须有显式次数或时间上界无上界即失败

相关规格​