关于http的幂等性(Idempotence)

在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“setTrue()”函数就是一个幂等函数,无论多次执行,其结果都是一样的.更复杂的操作幂等保证是利用唯一交易号(流水号)实现.

 

                                                                                                                                                                                            ----- 百度百科

  方法名 安全性 幂等性 说明
创建于更新 POST 创建子资源
PUT 用于创建、更新资源;
PATCH 与PUT类似,用于创建、更新资源,区别在于PATCH代表部分更新
删除 DELETE 删除资源
获取 GET 用于获取资源
HEAD 与GET方法类似,但不返回message body内容,仅仅是获得获取资源的部分信息(content-type、content-length)
  OPTIONS 用于url验证,验证接口服务是否正常;
  TRACE 回显服务器收到的请求,这样客户端可以看到(如果有)哪一些改变或者添加已经被中间服务器实现。

 

http的幂等性是说, 无论多少次调用同一个接口,对服务器的资源产生影响是相同的。

GET 

只是查询数据,所以不会影响服务器的资源,所以GET是幂等性的

POST

因为每次调用都会生在后台新建资源,所以 POST不是幂等性的。

PUT

它直接把数据替换到服务器资源,多次调用它,对服务器的资源影响是相同的。 所以PUT是幂等性的。


插入关于post,put,patch

PUT请求:如果两个请求相同,后一个请求会把第一个请求覆盖掉。(所以PUT用来改资源)

Post请求:后一个请求不会把第一个请求覆盖掉。(所以Post用来增资源)

Patch请求: 更新局部请求。(如修改表中的某个字段,put是全部更新)

一般认为:post用于创建数据,put用来更新数据。其实post和put都可以用来创建和更新数据。两者在技术上本质是没有什么区别,不过在http规范中,put是幂等性的,而post是非幂等性的。所以,一般用post创建数据, 用put更新数据。

最后一点补充: If the Request-URI does not point to an existing resource, the server MAY create a new resource,

对于put和patch如果对应的uri不存在,会自动创建。


PATCH

虽然它只是更新部分数据,但是Pacth不是幂等性的。Put全部更新,是幂等的,而Patch是部分更新,却不是了,真有点匪夷所思。

下面是一些解释:

通俗地说,就是Patch请求会执行某个程序,如果重复提交,可能(注意是可能)对服务器的资源造成不同的影响。

PATCH有可能是根据客户端提供的参数或者指令,动态的计算出某个值,例如每次请求后资源的某个参数减1,所以多次调用,资源会有不同的变化。所以PATCH是非幂等的。

 

DELEATE

删除数据,调用几次也只是删除了一次服务器的资源,所以DELETE是幂等性的

 

 

 

 

 

 

你可能感兴趣的:(关于http的幂等性(Idempotence))