什么是幂等?
什么是幂等?经常听到这个词,但不太清楚具体是什么含义。最近看书看到了,就总结了一下。
幂等:其实就是我们常说的“接口重复提交问题”。如果接口没有重复提交问题,则说接口是幂等的;反之则说是“非幂等”。
举例:有一个新增管理员接口,用户填写好表单后,就点击一下提交。由于网络原因,页面出现了延迟,用户以为没点到,于是就又点了一下提交。此时,等于同一个操作,发送了两条请求,若数据库最终只新增了一条管理员数据,则接口幂等,反之则“非幂等”。
非幂等的场景?
1、前端页面重复提交表单。
2、不法分子恶意刷单。
3、消息进行了重复消费。
保证幂等的方法?
1、设置防重token令牌。
还是以新增管理员做例子。在进入到新增页面时,服务端先生成一个token令牌,放入到redis中并返回给页面。页面提交表单时,把token令牌一起提交,服务端拿到token令牌后就判断redis中是否存在?若存在则删除redis记录并进行新增操作;若不存在,则说明时重复提交的请求,不进行任何操作。
2、页面防重复点击设计。
用户点击按钮后,就将按钮设置为不可点击状态,避免用户重复操作。(注:这种方法只能避免正常用户操作的情况,不能防止恶意攻击的情况。)