如何设计接口的幂等性?

接口幂等性是指用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。这类问题多发于接口的insert和update操作。

  • 前端web页面触发接口后置灰(多长时间内不能重复触发),这是幂等问题解决的第一道防火墙。

  • insert前先select。 不适合并发场景。

  • 数据库悲观锁。 select * from user id=123 for update;

  • 数据库乐观锁 在表中增加一个timestamp或者version字段,更新数据之前先查询,再使用id和version字段作为查询条件更新数据:

  • 唯一索引 如果是java程序需要捕获:DuplicateKeyException异常,如果使用了spring框架还需要捕获:MySQLIntegrityConstraintViolationException异常。

  • 根据状态机 支付状态1234。 该方案仅限于要更新的表有状态字段,并且刚好要更新状态字段的这种特殊情况

  • 建立防重表 该表可以只包含两个字段:id和唯一索引,唯一索引可以是多个字段比如name、code等组合起来的唯一标识。该数据插入防重表判断是否执行成功,成功则做其他数据操作

  • 分布式锁

  • 获取token

posted @ 2022-08-24 18:13  空中行走的鱼  阅读(16)  评论(0)    收藏  举报