理解 HTTP 幂等性 HTTP 幂等性是一种重要的概念,属于语义范畴,它定义了 HTTP 方法的特性,即一次和多次请求某一个资源应该具有同样的副作用。幂等性是分布式系统设计中十分重要的概念,因为它决定了 HTTP 中的分布式本质。理解幂等性对于设计高质量的 Web API 是非常重要的。 幂等性的定义来自于 HTTP/1.1 规范,指的是 Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request。简单地说,幂等性是指一次和多次请求某一个资源应该具有同样的副作用。 为什么需要幂等性?我们可以通过一个例子来说明。假设有一个从账户取钱的远程 API,我们可以用类函数的方式记为:bool withdraw(account_id, amount)。withdraw 的语义是从 account_id 对应的账户中扣除 amount 数额的钱;如果扣除成功则返回 true,账户余额减少 amount;如果扣除失败则返回 false,账户余额不变。 但是,在分布式环境中,我们不能轻易假设可靠性。一种典型的情况是 withdraw 请求已经被服务器端正确处理,但服务器端的返回结果由于网络等原因被掉丢了,导致客户端无法得知处理结果。如果是在网页上,一些不恰当的设计可能会使用户认为上一次操作失败了,然后刷新页面,这就导致了withdraw 被调用两次,账户也被多扣了一次钱。 解决这个问题的方案有两种,一种是采用分布式事务,通过引入支持分布式事务的中间件来保证 withdraw 功能的事务性。另一种是采用幂等设计,我们可以通过一些技巧把 withdraw 变成幂等的。例如,我们可以使用 ticket_id 来标识后续的操作,每次调用都将返回第一次调用时的处理结果。 在幂等设计中,我们可以分解取钱流程为两个步骤:1.调用 create_ticket() 获取 ticket_id;2.调用 idempotent_withdraw(ticket_id, account_id, amount)。这样,客户端就可以放心地多次调用。 幂等性是分布式系统设计中十分重要的概念,它可以解决分布式环境中的可靠性问题。理解幂等性对于设计高质量的 Web API 是非常重要的。


























- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于大数据下工程造价管理探究.docx
- 论GIS在环境管理及评价方面的应用.docx
- 第十二章第2讲基本算法语句.ppt
- JAVA课程方案设计书(周永新201190483).doc
- 计算机基础教学深度初探.docx
- 平面研究分析报告需要学哪些软件.doc
- 提高计算机通信网络可靠性的研究.docx
- 计算机应用软件要点问题的思考体会.docx
- CAD制图技术在机械工程中的开发与应用.docx
- 实验3:ucosII实时操作系统.doc
- MyEclipse内置的CVS客户端进行项目管理版本控制.doc
- Oracle数据字典.docx
- 基于项目教学法的初中计算机综合实践教学思考.docx
- Git高级技巧大全之深入实践基础教程
- 互联网+理财:应该选择量化、大数据还是AI?.docx
- 化工自动化及仪表之执行器培训.ppt


