了解RESTful的幂等性,并设计符合幂等规范的高质量RESTful API。
如何理解幂等HTTP幂等方法是指无论调用多少次都不会产生不同结果的HTTP方法。
无论您叫它一次,还是叫它一百次或一千次,结果都是一样的。
以上一篇博客文章为例。
GET / tickets#& nbsp;获取门票清单GET& nbsp;& nbsp;& nbsp;& nbsp; / tickets / 12& nbsp;& nbsp;& nbsp;&查看特定票证;&#b& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; / tickets / 12& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& n ##& nbsp;更新票证& nbsp; 12PATCH& nbsp;& nbsp; /票证/ 12& nbsp;& nbsp;& nbsp;& nbsp;#& nbsp;更新票证& nbsp; ; nbsp; 12DELETE& nbsp; / tickets / 12& nbsp;& nbsp;& nbsp;#& nbsp; delete ticekt& nbsp; 12 HTTP GET方法HTTP GET方法,用于获取资源,无论调用该接口多少次,结果都不会改变,因此是幂等的。
GET / tickets#& nbsp;获取门票清单GET& nbsp;& nbsp;& nbsp;& nbsp; / tickets / 12& nbsp;& nbsp;& nbsp;&查看特定的票证仅用于查询数据,不会影响资源的更改,因此我们认为这是幂等的。
值得注意的是,幂等是指对结果的影响,而不是资源本身。
怎么理解呢?例如,此HTTP GET方法每次都可能获得不同的返回内容,但它不会影响资源。
也许您会问是否有这种情况?当然有。
例如,如果我们有一个获取当前时间的接口,则应将其设计为GET / service_time#& nbsp;获取服务器的当前时间。
它不会影响资源本身,因此可以满足幂等性。
HTTP POST方法HTTP POST方法是非幂等方法,因为多个调用将生成新资源。
POST / tickets#& nbsp;创建新的票证,因为它会影响资源本身,并且每次调用都会产生一个新的资源,因此不满足幂等性。
HTTP PUT方法HTTP PUT方法是幂等的吗?让我们看一下PUT / tickets / 12#& nbsp; Update ticket& nbsp; 12,因为它直接用服务器的资源替换了实体部分的数据。
如果我们多次调用它,只会产生一种影响,但是HTTP方法具有相同的结果。
因此,它满足幂等性。
HTTP PATCH方法HTTP PATCH方法是非幂等的。
HTTP POST方法和HTTP PUT方法可能更容易理解,但是HTTP PATCH方法仅更新一些资源,为什么它不是幂等的?由于PATCH提供的实体需要根据程序或其他协议的定义在服务器上进行解析和执行,以便修改服务器上的资源。
换句话说,PATCH请求将执行一个程序。
如果重复提交该程序,则该程序可能会多次执行,这可能会对服务器上的资源造成其他影响,这可以解释为什么它是非幂等的。
也许您还是不明白这一点。
让我们举个例子PATCH / tickets / 12#& nbsp; Update ticket& nbsp; 12此时,我们服务器对方法的处理是,当该方法被调用一次时,某些字段是更新该票证记录的操作记录,并将该记录增加一。
这次,是否每次都更改了资源,所以它可能是非幂等操作。
HTTP DELETE方法HTTP DELETE方法用于删除资源,它将删除资源。
删除/ tickets / 12#& nbsp;删除ticekt& nbsp; 12多次调用对资源有相同的影响,因此也满足了幂等性。
如何设计幂等的高质量RESTful API HTTP GET方法与HTTP POST方法也许,您会想到一个面试问题。
HTTP请求的GET和POST方法之间有什么区别?您可能会回答:GET方法通过URL提交数据,并且可以在URL中看到数据; POST方法,数据以HTML HEADER提交。
但是,我们现在从RESTful资源的角度来看问题。
HTTP GET方法是幂等的,因此它适合于查询操作,而HTTP POST方法是非幂等的,因此它用于指示新操作。
但是,也有例外。
有时我们可能需要将查询方法转换为HTTP POST方法。
例如,很长(1k)的GET URL被POST方法替换,因为GET受URL长度的限制。
尽管它不是幂等的,但这是一个折衷的解决方案。
HTTP POST方法与HTTP PU