`

了解一下幂等

阅读更多
google了一些中文的资料, 基本了解了幂等是怎么回事儿. 备忘一下.

PUT,DELETE操作是幂等的。所谓幂等是指不管进行多少次操作,结果都一样。比如我用PUT修改一篇文章,然后在做同样的操作,每次操作后的结果并没有不同,DELETE也是一样。顺便说一句,因为GET操作是安全的,所以它自然也是幂等的。

POST操作既不是安全的,也不是幂等的,比如常见的POST重复加载问题:当我们多次发出同样的POST请求后,其结果是创建出了若干的资源。

安全和幂等的意义在于:当操作没有达到预期的目标时,我们可以不停的重试,而不会对资源产生副作用。从这个意义上说,POST操作往往是有害的,但很多时候我们还是不得不使用它。

还有一点需要注意的就是,创建操作可以使用POST,也可以使用PUT,区别在于POST是作用在一个集合资源之上的(/articles),而PUT操作是作用在一个具体资源之上的(/articles/123),再通俗点说,如果URL可以在客户端确定,那么就使用PUT,如果是在服务端确定,那么就使用POST,比如说很多资源使用数据库自增主键作为标识信息,而创建的资源的标识信息到底是什么只能由服务端提供,这个时候就必须使用POST。

一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等操作对于代理和缓存来说具有“友好性”,因为幂等操作的额外执行不会对二者产生危害性后果(除了带宽浪费)。
PUT方法是幂等的,幂等性意味着对于一个成功执行的请求,不管其执行多少次,其结果都是一致的。也就是说,只要你愿意,你可以用PUT方法对 Hotel资源进行任意次更新,其结果都一样。如果两个PUT方法同时发生,那么只有其中之一会赢得最后的胜利并决定资源的最终状态。删除操作也是幂等的,如果一个PUT方法和DELETE方法同时发生,那么资源或者被更新,或者被删除,而不可能停留在某个中间状态。

如果你不确定是PUT还是DELETE被成功执行,并且没有得到状态码409 (Conflict)或者 417 (Expectation Failed)的话,那么就重新执行一遍。而不需要附加的可靠性协议来避免重复请求,因为通常重复的请求不会有任何影响。

上述描述对于POST方法就不适用了,因为POST方法不是幂等的,若要两次执行同一个POST请求那就要注意了。POST方法所缺失的幂等性就解释了为什么当你每次重新发送POST请求时浏览器总是弹出警告。POST方法用于创建资源,而不需要由客户端指定实例id

幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()”函数就是一个幂等函数,“deleteFile()”函数就不是。“幂等”是HTTP Session和EJB失败转移中的一个重要概念。
当正在进行方法调用的时候失败了怎么办呢?答案是:处理过程中止,客户端看见错误消息提示(除非方法是幂等方法)。只有方法是幂等方法的情况,一些负载均衡器才能试图失败转移这些方法到别的实例。

幂等为何如此重要?因为客户端并不知道服务器何时失败的(在方法刚开始调用或者快要调用完成的时候)。如果是非幂等方法,则两次调用就会两次改变系统状态,系统就会处于不一致的状态。

在复杂应用中,不太可能把所有的方法都变成幂等方法。所以,只能通过失败转移减少错误,而不可能从根本上避免错误。

把应用程序设计为幂等的:幂等的的意思就是一个操做不会修改状态信息,并且每次操作的时候都返回同样的结果(换句话说就是:做多次和做一次的效果是一样的),通常,WEB请求,特别是 HTML forms 都被发送多次(当用户点击发送按纽两次,重载页面多次),导致多次HTTP请求。设计SERVLET和其他WEB对象为 幂等的,可以容忍多次请求。详细可以去参考设计模式“Synchronized Token ”和“Idempotent Receiver ”关于怎样设计幂等的的应用程序。
分享到:
评论
3 楼 FlyAway2 2014-07-22  
还有一点需要注意的就是,创建操作可以使用POST,也可以使用PUT,区别在于POST是作用在一个集合资源之上的(/articles),而PUT操作是作用在一个具体资源之上的(/articles/123),再通俗点说,如果URL可以在客户端确定,那么就使用PUT,如果是在服务端确定,那么就使用POST,比如说很多资源使用数据库自增主键作为标识信息,而创建的资源的标识信息到底是什么只能由服务端提供,这个时候就必须使用POST。

+++  非常好!!
2 楼 smithfox 2010-10-13  
幂等性 个人理解及应用
http://www.smithfox.com/?e=16
1 楼 mercyblitz 2010-06-29  
“幂等”的GET方法,在实现中,不一定能够100%满足。

相关推荐

    带你了解快速幂,快速幂基础知识,从小白到入门

    带你了解快速幂,快速幂基础知识,从小白到入门 带你了解快速幂,快速幂基础知识,从小白到入门 带你了解快速幂,快速幂基础知识,从小白到入门 该资源仅供学习 该资源仅供学习 该资源仅供学习

    Redis分布式锁解决接口幂等的两种方案

    Redis分布式锁解决接口幂等的两种方案一、背景二、基础知识三、解决方案四、实验五、说在最后的话 一、背景 还在为不了解分布式锁而烦恼吗?还在为众多微服务接口不幂等而发愁吗?如果是,并且有兴趣同我一起学习,...

    快速幂(快速算底数的n次幂)几种方法总结

    本教程适合所有准备学习快速幂算法的初学者,特别是那些对算法基础有所了解,但需要系统学习快速幂算法以应对面试和实际编程问题的开发者。 **使用场景及目标:** 这些教程适用于初学者在学习和实践阶段,帮助他们...

    快速幂模板讲解和快速幂代码

    在讲解快速幂之前,让我们先来思考一个问题:7的10次方,怎样算比较快?...这次的讲解就到这里了,希望大家对快速幂能有所了解,快速幂还包涵矩阵快速幂,快速幂的代码是需要背的,如果要熟练的话就只能多背!

    2024快速幂算法 超详细教程

    快速幂算法是一种高效的计算幂运算的方法,适用于计算大数的幂运算、计算机图形学中的阴影效果、密码学中的离散对数和指数运算等。通过本文,您将学习快速幂算法的原理、实现步骤、应用场景、优化方法、变体、实践...

    幂律耦合的三形式暗能量模型

    通过将暗物质的有效质量作为三形式场的幂律函数,并忽略暗能量的势项,我们获得了演化方程自治系统的三个解,包括de Sitter吸引子,跟踪解 和一个近似的解决方案 为了了解耦合的强度,我们将模型与最新的Ia型超新星...

    论文研究 - 介电弛豫的居里·冯·史威德定律和弛豫率的分布函数推导的Zipf幂定律以及分数阶微分方程的表现

    经典的功率定律弛豫,即以阶跃电压激励电介质的电流与时间的倒数的弛豫,即众所周知的居里·冯·史威德定律,是根据经验推导... 本文提供了一种分析方法,以了解非德拜弛豫,并为特别使用的经验居里-冯·史威德(通用)

    Java语言实现快速幂取模算法详解

    主要介绍了Java语言实现快速幂取模算法详解,具有一定参考价值,需要的朋友可以了解下。

    社会标注系统幂律特性分析 (2014年)

    为全面了解社会标注行为,帮助用户多样化、个性化地使用资源,首先归纳总结标签增长、标签使用与重用以及标签网络等方面的幂律特性。然后,分析幂律特性的形成原因,并使用拓扑势方法进行描述。最后,讨论幂律特性在标签...

    函数的幂级数展开式的应用 (2012年)

    学生对函数的幂级数的展开式都很熟悉,但对于它的应用了解的一般不多,本文就四个方面的应用,举例说明.

    一类本原不可幂定号有向图的Local基 (2011年)

    为了更进一步了解本原不可幂定号有向图的local基的相关性质,对一类含有3个圈的特殊的本原不可幂定号有向图的第k个local基进行了研究.首先利用相关文献所提及的关于本原不可幂定号有向图的重要定义及其引理,确定出...

    两类特殊的本原不可幂定号有向图的基 (2010年)

    为了进一步了解本原不可幂定号有向图基的相关性质,本文分别对含有三个圈和二个圈的两类特殊的本原不可幂定号有向图的基进行了研究。首先通过利用有关本原不可幂定号有向图的引理及定义得到基的上界,再运用反证法并...

    考研线性代数大纲.pdf

    掌握矩阵的线性运算、乘法、转置以及它们的运算规律,了解方阵的幂与方阵乘积的 行列式的性质. 3.理解逆矩阵的概念,掌握逆矩阵的性质,以及矩阵可逆的充分必要条件,理解伴随矩 阵的概念,会用伴随矩阵求逆矩阵. 4....

    Java中间件-RabbitMQ教程

    1. 了解消息中间件背景知识、使用场景、发展等 2. 掌握RabbitMQ、RocketMQ、Kafka这三款主流的消息中间件的架构、模型和使用(开发、 安装、集群部署、运维、监控等) 3. 掌握消息的可靠性、幂等性、顺序消息、延迟...

    页岩巴西劈裂试验的能量分布与临界特征分析

    为了清晰了解具有脆性破坏特征的页岩在拉伸破坏下的能量统计分布特征,研究整体破坏能量分布与局部应力下的能量统计分布规律,从而为现场压裂机制提供理论依据。选取四川盆地南部地区龙马溪组钙质页岩进行巴西劈裂...

    Java常见面试问题.docx

    Shiro缓存用户权限了解一下 8.Svn和git的区别? https://blog.csdn.net/walle167/article/details/84235823 9.Quartz的定时调度是怎么实现的?定时调度流程? Wait、notify 实现job类,设置触发器 放到调度器中 ...

    Java高级架构面试知识点整理.pdf

    或者说,如何保证消息消费的幂等性? 4.如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 5.如何保证消息的顺序性? 6.如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万...

    http协议接口及代码解析(超详细).docx

    虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。从根本上说,如果目标是当用户打开一个链接时,他可以确信从自身的角度来看没有改变资源即可。

    这个是关于Windows入侵后的痕迹清理 的相关操作,具体请看资源描述

    为了方便管理员了解掌握电脑的运行状态,Windows提供了完善的日志功能,将系统服务、权限设置、软件运行等相关事件分门别类详细记录于日志之中。所以,通过观察、分析系统日志,有经验的管理员不但可以了解黑客对...

    数字信号处理上机报告二

    1)根据数字信号序列的长度决定2的整数次幂N,用Matlab软件设计出快速付里叶变换及反变换的程序,或按照范例程序进行修改,输入信号序列,运行程序,检查程序是否有错。 2)添加绘图语句,画出数字信号变换前后的...

Global site tag (gtag.js) - Google Analytics