标准答案
- 通常由客户端为一次用户操作生成高随机性键,并在网络重试时复用;服务端也可基于业务请求号生成,但必须避免把不同意图错误合并。
- 幂等键的存储范围至少应包含调用方身份、接口名和请求体摘要,防止同一个键被跨用户、跨接口或不同参数复用。
- 首次请求需要原子占用键并记录处理中、成功或失败状态;并发命中时返回已有结果或明确处理中,而不是再次执行业务。
- 保存时长要覆盖客户端重试、网关重放、异步回调和账务风险窗口。高价值扣款通常需要比普通创建接口更长的保留和审计期。
- 同一幂等键携带不同请求体时应返回冲突错误,而不是默默使用第一次或第二次的参数。
题目解析
幂等键不是万能去重字符串。没有作用域和载荷一致性校验时,用户复制旧键或 SDK 错误复用键会让正常业务被误判为重复。
幂等记录过早过期会让延迟重试再次生效;永久保留则会增加存储和隐私成本,应按业务风险设置生命周期。
常见误区
- 只按幂等键字符串判断,不绑定用户、接口和请求摘要。
- 收到重复键就一律返回成功,忽略首次请求仍在处理或已经失败。
- 把每次点击都生成新键,导致超时重试无法命中。