接口幂等的实现
什么是幂等
接口幂等性的实质就是:接口可重复调用,在调用方多次调用的情况下,接口最终得到的结果是一致的。
有些接口天然支持幂等性,比如查询接口;而增加、更新、删除都要人工保持幂等性。
实现
全局唯一ID
全局的唯一ID,就是根据业务操作和内容生成一个全局ID,在执行操作之前,先根据这个全局唯一ID是否存在,来判断这个操作是否已经执行。
如果不存在则把全局ID,存储到存储系统中,比如Redis、Mysql等。如果存在表示该操作已经执行。
全局唯一IP是一个通用方案,可以支持插入、更新、删除业务操作。
去重表
适用于在业务中有唯一标识的插入场景中,比如一个订单只会支付一次,可以将订单ID作为唯一标识。
这时,我们就可以建一张去重表,并且把唯一标识作为唯一索引,在我们实现时,把创建支付单据和写入去去重表,放在一个事务中,如果重复创建,数据库会抛出唯一约束异常,操作就会回滚。
插入唯一主键
这种适用于插入并且有唯一索引的情况,比如我们要关联商品品类,其中商品的ID和品类的ID可以构成唯一索引,并且在数据表中也增加了唯一索引。这时就可以使用InsertOrUpdate操作。
多版本控制(MVCC)
这种适用于更新场景,通过在更新的接口中添加版本号来实现幂等。
状态机控制
这种方法适合在有状态机流转的情况下,通过状态字段的值的大小来做幂等,状态只能顺着一个方向流转。
参考文献 & 鸣谢
相关文章