前后端分离后请求接口提交数据如何避免重复请求?类似 csrf 这样的

前后端分离后请求API接口提交数据如何避免重复请求?防止网速过慢重复提交数据

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7

先保证代码没 BUG 的情况下,你要会正确地使用数据库的事务。

  1. 前端页面上应该防止用户重复提交表单。
  2. 可以利用数据库的这种“主键唯一约束”特性,在插入数据的时候带上主键。

详细如下:生成一哥全局唯一的订单号。在用户进入创建订单的页面时,前端页面先调用这个生成订单号的方法得到一个订单号,在用户提交订单的时候,在创建订单的请求中带着这个订单号。这个订单号也是我们订单表的主键,这样,无论是用户手抖,还是各种情况导致的重试,这些重复请求中带的都是同一个订单号。订单服务在订单表中插入数据的时候,执行的这些重复 INSERT 语句中的主键,也都是同一个订单号。数据库的唯一约束就可以保证,只有一次 INSERT 语句是执行成功的。 如果是新增的同时(新增成功了)又手抖点了一下这时候变成更新了,那你同样只返回订单创建成功了就行了。

4年前 评论

楼上说的没错,你要避免接口重复请求,其实把接口做成幂等性就好了。

4年前 评论

@Ali 这个方法是不错,但是估计很少是这样做吧

4年前 评论

加个缓存不就行了,两秒内再次请求点击提示他请勿重复提交

4年前 评论
lddtime 4年前

为了业务的正确性: 首先, 前端需要控制 不能 让用户连续点击 提交 按钮. 其次, 你的接口做成 幂等 的.

  1. 如果 这个业务正巧可以利用数据库唯一索引特性的话, 可以直接建一个唯一索引.
  2. 或者就如 Ali 所说的一样.
  3. 或者如果都用不上的话, 毕竟你的问题是防止网速过慢重复提交数据, 那么你就在你的业务代码里做检查. 提交过了就不允许提交.
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!