Designing robust and predictable APIs with idempotency

本文强调的 idempotency 在 api 设计中极其关键,同一个api、相同参数调用多次、结果一样。Stripe 的核心产品就是他们的支付 api,对 api 设计自然颇有心得。

往往都有某种形式的 idempotency key 来保证 exactly once,例如同一个支付 api 相同参数不小心调用了多次(如请求失败、重试),只允许扣一次钱;发邮件的 api 相同参数不小心调用了多次,收件人只能收到一次信。

湾区日报自动发微博、Twitter、Facebook的代码也有 idempotency key,放在 redis 里,避免同一条信息在短时间内重复发送。