什么是接口幂等性
首先我们先了解一下什么是接口幂等性,接口幂等性指的是在一段时间内接口请求次数不得大于一次.
接口幂等性的使用场景
在某些场景下需要接口幂等性的支持,比如说我们的支付场景,订单场景等等,如果我们点击了多次支付按钮,是不是就会扣很多次钱呢,显而易见,这是非常不合理的情况,所以我们需要通过接口幂等性来保证我们用户能有一个比较良好的体验.
接口幂等性的实现思路
我们的接口幂等性实现,一般会侧重于新增,修改这2方面,查询和删除其实本身就是天然幂等性的,前者可以频繁调用,因为本身他就是一个无状态的,不会修改自己的任何业务属性而删除他只能删除一次,我们会通过查询列表或者校验是否存在来规避这个问题.
这里商量一下接口幂等性的问题解决思路,比如说你要实现一个支付接口,在这种场景下redis就可以解决,可以上游生成一个requestId,一定的时间内的自动过期,时间一长就会变成另外一个,如果业务执行结束,就把key存到redis里,第二次请求进来就会去redis中查询是否存在这个requestId,如果存在的话,那么就说明在规定范围时间内已经执行过一次操作了,直接返回用户操作重复信息.
RequestId的其他优势
在这里我们的requestId其实也可以当做我们日志定位的小技巧,我们可以通过cat日志,然后grep相关的id来查询那条请求对应的上下文,进而快速的对问题进行一个定位,特别是在复杂场景下,系统出现了问题,我们可以对问题进行快速定位,复现乃至解决.