今天面试被人问到一个幂等性问题,求大家解惑

2020-08-27 17:04:20 +08:00
 xiaofan2

他说的是如果一个人不小心点击两次,生成不同请求如何保证幂等?两次不同请求代表 token 不同或者前端发送的随机数不同,那如何防止??

6547 次点击
所在节点    程序员
29 条回复
CantSee
2020-08-28 01:15:22 +08:00
token 唯一性
xuanbg
2020-08-28 08:34:18 +08:00
首先,这个不是幂等性问题。有 3 个办法可以解决这个问题:
1 、前端防抖,按钮点击后立即禁用,等接口返回后再视情况启用或跳转页面。
2 、后端限流,同一来源在一定时间间隔内只允许调用一次。这个方案的好处是通用,且可以顺便减轻接口被非法调用的压力。
3 、使用令牌,前端提交数据前先获取一个令牌,后端限制令牌只能使用一次。
Jammar
2020-08-28 09:18:29 +08:00
前端请求之前先获取一段唯一字符串,请求时带上,后端写入了就从缓存里删了
fdingiit
2020-08-28 16:40:38 +08:00
@coderxy 不要再误导人了 get 请求一样可以写成不幂等
coderxy
2020-08-28 17:16:58 +08:00
@fdingiit 我说的是按照 restful 风格的规则下。 你要是拿 get 请求做新增操作,那自然是不幂等的。
ksice
2020-08-28 18:40:01 +08:00
感觉防重复提交也可以维持幂等性
crclz
2020-08-29 08:21:20 +08:00
看可以使用幂等接口设计(局限)、ConcurrencyToken (例如实体的 updatedAt )、csrf-token (只能支撑非 spa 的场景
) or 客户端生成的 token 。
buhi
2020-08-29 09:48:33 +08:00
幂等性是后端保证的, 不是前端保证的
youyang
2020-08-29 11:45:27 +08:00
@xuanbg agree

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/701963

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX