接口的幂等性

什么是接口的幂等性?

同一个接口,多次发出同一个请求,必须保证操作只执行一次。 也就是指用户对于同一个接口发起的一次请求或者多次请求的结果是一致的,不会因为多次请求而产生不同的结果。

 

触发场景:

1、前端进行重复提交:订单接口,用户连续多次点击下单操作,导致后端收到多条请求,同一个订单可能会多次创建

2、接口超时重试:支付接口,当调第三方接口时,可能由于网络等原因导致调用失败而多次调用,出现多次扣款的情况

3、消息重复消费:MQ消息中间件在生产端和消费端都有重试机制,也就是说同一消息可能被重复消费的问题

 

实现方式:

1、数据库的悲观锁

update table set field = value where id = 1 for update;

 

2、数据库的乐观锁

update table set field = value, version = version1 + 1 where id = id and version = version1 ;

 

3、状态机制

在日常业务很多都有流转状态,比如订单业务,有待支付、已支付、待发货、待收货、已完成、已取消等状态。
我们可以通过定义status状态字段,在进行更新操作时使用对应的状态来实现幂等性。

 

4、数据的唯一索引

 

5、redis进行实现

Redis实现的方式就是将唯一序列号作为Key,唯一序列号可以是一个字段,也可以是多字段组成的值。例如:订单表的订单号,大多是多个字段的唯一性组合。同时需要设置一个key的过期时间,否则 Redis 中会存在过多的 key

 

6、Token机制

token机制每一次操作生成一个唯一性的凭证,需要前后端进行一定程度的交互来完成。

 

posted @ 2023-11-05 00:07  方达达  阅读(6)  评论(0编辑  收藏  举报