幂等性
本文的架构图
一.什么是幂等性?
http/1.1中对幂等性的定义是:一次或者多次请求对于资源本身应该具有相同的结果.也就是说,其任意多次执行对资源本身所产生的影响均于一次执行的影响相同.
解释重点:
1.这里所说的资源主要是我们数据库的数据,多次请求对我们的资源没有副作用.
2.幂等性关注的是以后多次的请求是否对资源产生副作用,不太关注结果.
二.什么情况下要保证幂等性?
由上我们知道幂等性是什么?那我们应该什么情况下保证幂等性呢?
1.我们查询数据库信息的时候,无论查询多少次,都不会改变我们的数据库信息,也不会影响我们查询的结果,所以查询操作的接口天生就是幂等性的.
2.(delete)删除操作,无论你删除多少次,数据库的信息,也不会改变.所以这也是幂等性的.
3.(insert)操作,本身就不是幂等性操作,一次请求,则一次插入,所以不是幂等性的.
4.update大部分时候可以使幂等性的,但是这种情况就不是幂等性的 update tb_order set money=money - 10 where customId = xxxxx;
所以综上所述有些操作天生就是幂等性的,有些天生就不是幂等性的,我们需要保证每个接口都幂等性吗?这是错误的理解.比如我们买东西,选择商品数量的时候,我不能多次增加吗?当然是可以的.所以这里幂等性主要的是将的是我们在支付的时候,同一个订单去调用支付的接口的时候,由于网络等原因导致我们同一个订单重复扣费.
- 一般我们调用第三方的支付接口时不需要保证幂等性,并且幂等性不是由我们控制的.
- 需要保证幂等性的场景是我们作为支付宝,本身具有扣减用户的金额的权利时,我们才需要保证幂等性.
三.如何保证幂等性?
详情见本系列文章:49.javaEE-对接第三方支付(1)