接口幂等的实现

什么是幂等

  接口幂等性的实质就是:接口可重复调用,在调用方多次调用的情况下,接口最终得到的结果是一致的。
  有些接口天然支持幂等性,比如查询接口;而增加、更新、删除都要人工保持幂等性。


实现

全局唯一ID

  全局的唯一ID,就是根据业务操作和内容生成一个全局ID,在执行操作之前,先根据这个全局唯一ID是否存在,来判断这个操作是否已经执行。
  如果不存在则把全局ID,存储到存储系统中,比如Redis、Mysql等。如果存在表示该操作已经执行。

  全局唯一IP是一个通用方案,可以支持插入、更新、删除业务操作。

去重表

  适用于在业务中有唯一标识的插入场景中,比如一个订单只会支付一次,可以将订单ID作为唯一标识。
  这时,我们就可以建一张去重表,并且把唯一标识作为唯一索引,在我们实现时,把创建支付单据和写入去去重表,放在一个事务中,如果重复创建,数据库会抛出唯一约束异常,操作就会回滚。

插入唯一主键

  这种适用于插入并且有唯一索引的情况,比如我们要关联商品品类,其中商品的ID和品类的ID可以构成唯一索引,并且在数据表中也增加了唯一索引。这时就可以使用InsertOrUpdate操作。

多版本控制(MVCC)

  这种适用于更新场景,通过在更新的接口中添加版本号来实现幂等。

状态机控制

  这种方法适合在有状态机流转的情况下,通过状态字段的值的大小来做幂等,状态只能顺着一个方向流转。


参考文献 & 鸣谢