核心概念
幂等(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(次幂)——一个再做一遍也和做一遍「同等效力」的操作。
又称
另见