对于接口幂等性的一些见解!!

78 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

幂等性

客户端对某个接口以相同的请求参数发起多次请求后对系统的数据产生的结果是一致的,不会因为多次请求而引发数据错误。例如:张三在淘宝上下单买了条裤子,在付款的时候点击确认付款,由于网络问题响应比较慢,然后张三又点了一次确认按钮,如果没有确保这个接口的幂等性,张三在这次购物中就会支付了两次费用了。

  1. 当客户请求页面时,则由前端请求服务端获取token的接口获取一个token,把这个token可以放到header头或者session中,在下次请求接口是带上,服务端可以通过这个token来判断请求是否重复,当请求成功后服务端就更新下这个token,等前端重发发起请求,token验证不通过了。
  2. 如果是直接操作数据库update一些数据,我们可以通过乐观锁来实现。具体乐观锁的实现方式有很多种各位可以自行去百度查阅。
  3. 如果接口只是简单的数据写入数据库,可以根据主键查询数据是否已经存在,如果已经存在就直接返回。或者利用唯一主键来保证数据不会重复插入。
  4. 如果接口只是为了把数据缓存到redis当中,这种情况就是直接往redis中set值,那这种就不必考虑幂等性了,因为redis的所以操作都是都是原则性的,本来就是幂等性的。
  5. 如果是复杂的业务情况,可以在请求接口的时候加上一个全局唯一ID,接口在处理时根据这个ID去redis当中查询之前是否消费过。如果没有消费过,就进行消费并将这个消息的ID写入到redis当中。如果已经消费过了,就无需再次消费了。

以上就是我对接口幂等性的一些理解和想法,如果有哪里不对大家可以在评论区发表你们的意见让我们一起学习成长。

谢谢观看!streetlamp敬上!