首先,idempotency 的意思就是一個動作做一次跟做很多次的結果是一樣的,譬如 HTTP POST & PUT 的比較,PUT 是 idempotent 的,POST 不是,因為它每次都會產生新東西。
Idempotency Key 據說是 Stripe 發明的詞,為了要讓一些操作可以避免重複執行,以 HTTP request 為例,會讓 client 產生一個 unique 的 key, 並在 HTTP header 帶上這個 key, server 端會 maintain idempotency key 和 result 的對應,如果發現已經有了,就直接回傳結果不處理,如果沒有,代表還沒做過,就執行操作並把 key & result 存起來。
Idempotency Key 也可以由 server 產生,不過必須要是這個操作是由 server 發起的。簡單來說,是由操作的發起者產生這個 key。