加载中...

| 类型 | 系统设计原则 / 分布式系统模式 |
| 相关规范 | RFC 7231(HTTP/1.1 语义) |
| 典型应用场景 | 支付系统、消息消费去重、API 重试安全 |
HTTP 规范(RFC 7231)明确了各方法的幂等性:GET、HEAD、PUT、DELETE 是幂等的,POST 不是。PUT 更新资源内容,不管执行几次最终状态相同;DELETE 删除后再删仍是删除状态。POST 创建资源,每次调用可能产生新记录,不幂等。这就是为什么 REST API 设计中更新操作优先用 PUT 而不是 POST。[1]
客户端在请求头里带一个唯一 ID(UUID),服务端收到后先查该 ID 是否已处理,已处理则直接返回之前的结果,未处理则执行并存储结果。Stripe 支付 API 要求客户端使用 Idempotency-Key 请求头,即使网络超时重试也绝不重复扣款。数据库层面可在 (user_id, outer_trade_no) 建唯一约束,重复插入直接报冲突,业务捕获后返回原订单,逻辑简单且可靠。

| 类型 | 系统设计原则 / 分布式系统模式 |
| 相关规范 | RFC 7231(HTTP/1.1 语义) |
| 典型应用场景 | 支付系统、消息消费去重、API 重试安全 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧