幂等设计的功效:执行多次操作和执行一次操作的结果都是一样的。
HTTP四大动作中:
GET:用于获取资源,不会对服务器产生任何影响,视为安全的。因此其有幂等性。
POST:用于创建或更新资源,每次执行的结果都不一样。就属这货最不安分。其不具备幂等性。
PUT:用于创建或更新资源,定位到具体资源。因此具有幂等性。
DELETE:用于删除资源,定位到具体资源。因此具有幂等性。
我们通常在设计Web api的时候,需要考虑某些接口操作的幂等性。例如转账,客户A通过转账操作将500元钱转给客户B,该操作在服务器执行成功了,但是由于某些原因(网络阻塞,或者突然断网又恢复网络等原因),转账成功的状态消息并没有被客户A的终端机成功接收,导致客户A误以为转账失败,从而进行了第二次转账。如果这一系列操作不考虑幂等性,那么事后,客户A还不得暴走,账户的钱怎么凭空消失了那么多?如果考虑了幂等性,那么无论客户A在当前页面执行了多少次转账操作,客户B只能收到一次转账的金额500元。这不只是客户体验的问题,也是系统操作完整性的问题。如此看来,幂等性在接口设计中何等重要!
关于幂等设计,可参考:
1、Synchronized Token:客户端的每一次 Request 里,必须携带一个服务器端给出的 Hash Code 作为 Token,这个 Token 只能用一次,不能重复使用;
2、Idempotent Receiver:幂等接收器。
扩展参考资源:理解HTTP幂等性
原文:http://www.cnblogs.com/williamwsj/p/7142198.html