基于mysql去重表的接口幂等控制

一、简介 

一般来说对于后端接口的幂等控制有多版本控制(适用于更新场景,在更新接口中加一个版本号,执行更新操作时校验版本号)、状态机控制(适用于在有状态机流转的情况下做幂等控制,类似于多版本控制)以及去重表等方法。

二、基于mysql的去重表接口幂等控制

1、创建去重表

去重表只需要有requestid,创建时间,更新时间三个字段即可,requestid作为主键。

--幂等表

DROP TABLE IF EXISTS `t_unique`;

CREATE TABLE `t_unique` (

`requestId` varchar(64) NOT NULL COMMENT 'requestId',

`gmtCreate` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',

`gmtUpdate` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '更新时间',

PRIMARY KEY (`requestId`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2、校验逻辑

        对于需要做幂等的接口,在前端请求时服务端即生成一个随机的requestid返回给前端,前端表单提交的同时将requestid同时提交。接口对requestid进行校验。

        校验逻辑是:将requestId插入去重表,如果插入成功则说明接口是第一次访问,返回没有被幂等。同时需要捕获异常,出现异常并不一定是去重表里有数据,可能是事务隔离级别导致,所以要到去重表去查一次确认数据是否存在,如果不存在相应数据则抛出异常让接口重试,如果数据存在则返回接口被幂等。

你可能感兴趣的:(基于mysql去重表的接口幂等控制)