zoukankan      html  css  js  c++  java
  • 表单重复提交问题(接口幂等性)

      近期工作中遇到用户重复提交表单信息情况,尤其是在网络延时的情况下,用户点击提交按钮后,页面迟迟未响应,于是就会再次点击提交按钮。这样就导致产生重复数据,会对后续的业务带来一定问题。为此,查了一些资料,学习总结了下相关问题的解决思路。

      首先,重复提交的问题,专业点的说法叫做接口幂等性问题。一个接口, 多次发起同一个请求,必须保证操作只能执行一次;出现这类问题的常见业务场景有:  

    **使用场景:


      1.订单接口(不能多次创建同一订单)
      2.支付接口, 重复支付同一笔订单只能扣一次钱
      3.支付宝回调接口,可能会多次回调, 必须处理重复回调
      4.普通表单提交接口,因为网络超时等原因多次点击提交, 只能成功一次等等

    **常用解决方案

      1.唯一索引 -- 防止新增脏数据
      2.token机制 -- 防止页面重复提交
      3.悲观锁 -- 获取数据的时候加锁(锁表或锁行)
      4.乐观锁 -- 基于版本号version实现, 在更新数据那一刻校验数据
      5.分布式锁 -- redis(jedis、redisson)或zookeeper实现
      6.状态机制 -- 状态变更, 更新数据时判断状态

  • 相关阅读:
    Advanced Developer's Blog
    图片文字识别
    Unit test resources
    SpringBoot-mvn插件
    flask中使用proto3
    QTA-qtaf自动化测试实践
    AttributeError: module 'virtualenv' has no attribute 'create_environment'
    qtaf dick 报错 NameError: name 'dict_values' is not defined
    24点python实现
    mysql在win下移植
  • 原文地址:https://www.cnblogs.com/niew/p/13429810.html
Copyright © 2011-2022 走看看