核心概念
冪等(idempotent)
/ eye-DEM-po-tent /
如果一個操作做一次和做十次的結果完全一樣,它就是「冪等(idempotent)」的。再按一下電梯按鈕,並不會召來十部電梯;按鈕已經亮著,再按也改變不了什麼。無論你重複多少遍,結果都一樣。
拿它和「給我的餘額加 1」對比一下——跑五次你就多了五塊錢,這顯然不是冪等的。但「把我的餘額設為 100」就是冪等的:跑一次還是跑五十次,餘額都是 100。區別就在於:重複執行是會層層累加效果,還是只會落到同一個答案上。
這正是讓「重試」變得安全的關鍵。網路會斷、請求會逾時,你常常根本分不清一個請求到底有沒有發出去。只要操作是冪等的,你就可以放心地再試一次,不用擔心把卡刷兩遍、或建出兩份副本——重複它毫無副作用。
PUT /users/42 { "name": "Ada" } # set name to Ada — same every time
POST /users { "name": "Ada" } # create a user — runs again, makes a duplicatePUT 是「設成某個值」(冪等);POST 每次都新建一個(不冪等)。
這個詞來自數學:idem(相同)+ potent(次冪)——一個再做一遍也和做一遍「同等效力」的操作。
又稱
另見