POST pay-104 → pay_001 · 扣款 ¥100POST pay-104 → 重放 pay_001 · 余额不变同一个 key,第二次返回第一次的结果,余额 ¥300 → ¥200。重试安全。
数据与服务 · 运行与可靠性
同一个业务意图重复到达时,服务端按幂等键只执行一次副作用,重复请求返回第一次存储的结果。
点「支付 ¥100」发起一笔支付,连点两次模拟用户双击或网络重发。带上 Idempotency-Key 时,服务端把第一次的结果按 key 存下,重复请求返回存储的结果,余额只降一次;关掉 key 再连点,POST 默认不幂等,每次都扣。
pay-104连点「支付 ¥100」= 用户双击或网络重发;「换新意图」会生成新的 key,代表一笔新的业务意图。
还没有已记录的 key;首次处理后会把结果存到这里。
余额 ¥300。下一步:点「支付 ¥100」发起支付;连点两次模拟用户双击或网络重发,看余额是否只降一次。
面板里的余额、key 存储和请求日志,对应幂等机制的三个工程要点。
规范约定了方法的幂等性;POST 不幂等,所以支付、创建这类接口要靠额外的幂等键兜底。
GET是是读取,无副作用PUT是否用给定状态整体覆盖,重复结果一致DELETE是否删除,重复后资源仍是不存在POST否否创建 / 支付,每次都可能改变状态,需幂等键safe 指「不产生副作用」(GET 只读);idempotent 指「重复执行的副作用等同一次」。GET 两者都是,POST 两者都不是,所以 POST 最需要幂等键保护。
只要同一个意图可能因为重试而被发送多次,就需要幂等保护。
把一次幂等支付拆成可追查的步骤。
只差一个幂等键,余额的结果完全不同。
POST pay-104 → pay_001 · 扣款 ¥100POST pay-104 → 重放 pay_001 · 余额不变同一个 key,第二次返回第一次的结果,余额 ¥300 → ¥200。重试安全。
POST → pay_001 · 扣款 ¥100POST → pay_002 · 又扣款 ¥100POST 默认不幂等,重试和连点各执行一次,余额 ¥300 → ¥100,用户被多扣。
支付接口收到同一个 Idempotency-Key 的第二次请求,最正确的服务端行为是?
术语的技术定义和行为以这些一手或权威资料为准。
和本知识点经常一起出现的概念。