【べきとうせい】

冪等性(べきとうせい) とは?

💡 「何回やっても同じ結果」になる安心設計
📌 このページのポイント
冪等性(Idempotency) 1回リクエスト PUT /user name: 田中 3回リクエスト PUT /user PUT /user PUT /user name: 田中 結果は同じ! 冪等でない例(POST) POST /orders × 1回 → 注文が1件作成 POST /orders × 3回 → 注文が3件作成される! 冪等なAPIは何度呼んでも同じ結果。リトライ時の安全性が高い
冪等性のイメージ
ひよこ ひよこ

なんで重要なの?

ペンギン先生 ペンギン先生

ネットワークは不安定だから、APIリクエストが成功したか不明なことがある。そのときリトライするけど、冪等でない操作だと「商品を2回注文してしまった」のような二重処理が起きる。冪等なAPIなら何回リトライしても安全なんだよ

ひよこ ひよこ

HTTPメソッドでの冪等性は?

ペンギン先生 ペンギン先生

GETは当然冪等(何回取得しても同じデータ)。PUTも冪等(同じデータで上書きしても結果は同じ)。DELETEも冪等(すでに削除済みなら404を返すだけ)。POSTは冪等ではない(2回呼ぶと2つのリソースが作成される可能性)。だからPOSTにはIdempotency-Keyヘッダを使って冪等にすることがあるよ

ひよこ ひよこ

Terraformでの冪等性は?

ペンギン先生 ペンギン先生

terraform applyを何回実行しても、定義した状態に収束する。サーバが既に存在すればスキップし、設定が違っていれば更新する。「あるべき状態」を宣言して、何度適用しても同じ結果になるのがTerraformの冪等性だよ。Ansibleなども同じ考え方だね

ひよこ ひよこ

決済APIで冪等性を確保するには?

ペンギン先生 ペンギン先生

StripeなどはIdempotency-Keyという一意のキーをリクエストヘッダに付与する仕組みを提供しているよ。同じキーで2回リクエストしても、2回目は1回目の結果をキャッシュから返す。これで「2回課金される」事故を防げるんだ。決済やポイント付与など「二重処理が致命的」な場面では必須の設計だね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「冪等性」って出てきたら「何回実行しても同じ結果になる性質」と思えればだいたいOK!
📖 おまけ:英語の意味
「Idempotency」 = 冪等性
💬 数学用語が起源。f(f(x)) = f(x)が成り立つ関数を冪等と呼ぶ。APIでは「2回呼んでも1回と同じ効果」だよ
← 用語集にもどる