接口调用次数限制

项目中出现这样的一个需求:

    现在有一个发送验证码的接口,验证码是使用的腾讯云的发送验证码,费用取决于发送验证码的条数和验证码短信中的字数的多少。

    节省费用方案:

        1.首先发送短信信息的字数要简洁,这个和程序员没有多大的关系,运营人员和产品经理决定好了,程序员负责设置即可

        2.调用接口的时候可以加一层防护:修改密码和重置密码的时候手机号必须是火眼金睛平台的会员或者注册过的体验会员,别的手机号不会发送。这一点是预防用户随便填写手机号获取验证码的,可以节省一部分开销。注册的时候,不需要验证手机号是否是平台会员。

        3.调用接口频次添加限制。

                实现思路:前端发送的请求最好带一个请求头,请求头名称为requestId,请求头内容是该用户的唯一标识+该请求的唯一标识(字符串类型)。不过呢,在我这个项目里面没有添加这个请求头,我可以后台中拼出一个字符串标识该用户的该请求的唯一id,所以不必前端进行配合。

                接口中的逻辑:(主要用到了redis,在redis中存放的结构是:key为requestId,value是该接口被调用限制次数,可以设置一个有效期:该有效期表示在该段时间里面,最多被调用多少次)

                        1).自己拼出requestId或者从请求头中获取到requestId,根据该requestId去redis中查询,

                        2).如果查出的count为null,则调用redisService.set(requestId,count,outtime)方法存储该记录,存完之后正常请求

                        3).如果查出的count不为null,此时与1比较,如果大于1,count自减1,自减之后正常请求;否则拦截,回复前端50006,表示请稍后重试--->稍后就是等到设置的有效期结束以后redis自动删除记录。此时整个流程跳回2.


        注意:自减一,这个我通过查jedisAPI,查出来一个decr方法,然后修改自己的redis工具类。

你可能感兴趣的:(接口调用次数限制)