【べきとうせい】

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

最終更新:
💡 同じお願いを繰り返しても、効果は1回分

同じ操作を複数回行っても、1回行った場合と意図した効果が同じになる性質。APIの再送などで重要だが、返り値・ログ・処理時間が毎回同じという意味ではない。

📌 このページのポイント
同じお願いを、1回と3回で比べよう✓ 名前を「田中」にする1回名前:田中3回名前:田中注文を1件追加(重複防止なし)1回注文:1件3回注文:3件見るのは、操作の「意図した効果」応答メッセージやログは、同じとは限らない
注文数は最初が0件の例。同じ操作の回数と、意図した効果の関係を見る。
ひよこ ひよこ
冪等性は、どういう意味なの?
ペンギン先生 ペンギン先生
例えば「名前を田中にする」は、1回でも3回でも最終的な名前が田中になるよ。一方、「注文を1件追加する」は、重複を防ぐ仕組みがなければ繰り返すたびに増える。同じ操作を何回しても、意図した効果が1回と同じかどうかを見るんだ。
ひよこ ひよこ
返ってくるメッセージも、毎回同じ?
ペンギン先生 ペンギン先生
そこは別だよ。削除の1回目に成功、2回目に見つからないと返っても、対象がなくなるという効果は同じ。HTTPの冪等性は、リクエストが意図するサーバーへの効果の話で、記録用のログなどまで同じにする性質ではないんだ。
ひよこ ひよこ
通信に失敗したときに、どう役立つの?
ペンギン先生 ペンギン先生
応答が届かなくても、サーバーでは操作が終わっているかもしれないよ。冪等な操作なら、同じリクエストを再送しても意図した効果が増えない。HTTPではPUTとDELETE、およびGETなどの安全なメソッドを冪等と定義している。ただし、実装がその意味を守る必要があるよ。
ひよこ ひよこ
POSTでも、二重注文を防げる?
ペンギン先生 ペンギン先生
APIが冪等キーなどの仕組みを提供していれば、同じ処理の再送を識別できるよ。例えばStripeでは同じキーの再送に保存した結果を返し、パラメーターも照合する。ただしキーを保持する期間などの条件がある。別の注文には新しいキーを使い、APIの仕様を確認しよう。
ひよこ ひよこ
Terraformを何回実行しても、必ず何も変わらない?
ペンギン先生 ペンギン先生
宣言した状態に近づける考え方は冪等性と関係するけれど、実行のたびに無条件で同じとは限らないよ。設定や実際の状態が変われば計画も変わる。途中の失敗もあるので、Terraformでは変更計画を確認し、失敗の原因を直してから再実行するんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「冪等性」って出てきたら「同じ操作を繰り返しても、意図した効果は1回と同じという性質」と思えばだいたいOK!
📖 おまけ:英語の意味
「Idempotency」 = 冪等性
💬 数学用語が起源。f(f(x)) = f(x)が成り立つ関数を冪等と呼ぶ。APIでは「2回呼んでも1回と同じ効果」だよ

参考資料

← 用語集にもどる