一、业务场景
自己参与开发的很多项目都会对外提供一些接口,比如之前自己参与开发的一个小程序的后台项目,有很多的接口都是提供
给小程序进行调用的,这种做得有接口访问量统计。接口访问量统计可以很直观的看到接口被调用的次数,哪些接口被高频率
访问,需要做优化都是比较有利的数据支撑。另外对一些比较重要的接口,需不需要做限流处理,也是一个重要的参考指标。
最后就是哪些时间段内,比如是上午、中午、下午,还是周一到周三或者周四到周日访问量比较多,都可以很直观的看出来。
如果需要统计每个接口的访问量的话,该如何进行统计呢?
二、需求分析
首先是设计接口访问统计表,表的设计很常规,包含一些常用的字段即可。比如统计类型,按照小时统计还是按照天或者
是按照月统计等等;其次就是接口的访问名称,访问的URL;然后可以添加一个统计时间,这个可以根据需要来,可以是一个
时间段,也可以只是一个具体的统计时间。时间段的话,就可以设计成开始时间和结束时间;具体统计时间的话,就可以按照
上一次统计的时间,截止到当前时间进行统计。最后就是接口访问量。设计很灵活,没有固定的模式,可以按照项目的实际需求
来进行设计。
三、解决方案
具体如何实现呢?自己参照一些开发过的项目,可以写一写大致的思路。第一步就是需要有一个地方能够拿到所有的需要
统计的接口信息,主要就是URL还有接口说明。由于接口请求的URL一般都是固定的,不会随意改变,数据量少的话可以考虑
使用一个枚举值来进行存储。或者是使用一个独立的配置文件来配置这些接口数据信息,然后在将配置信息加载到项目中。如果
接口非常多的话,比如有几百条数据或者上千条数据,则使用枚举值就不太适合,就可以考虑新建数据表来进行存储接口数据。
第二步工作是存储每次调用接口时的访问信息,有的接口访问量比较大,并且需要快速做出响应,比较简单实用的处理方式
就是将访问的数据信息存储在缓存当中,先将数据保存下来,之后再去做其他的处理。每访问一次,就让某个接口的访问量加一。
如果是使用redis进行统计操作,里面有个方法是直接让redis中存储的某个值加一的操作,非常地方便。这步操作也可以使用
拦截器+异步的方式对被访问接口进行自增操作,加快接口的访问效率。
完成前面前面两步后,第三步就是如何来进行统计的问题。一般的方式就是启一个定时任务,比如半小时或者一个小时执行
一次,统计接口的访问量,然后将统计数据入库永久存储。可避免redis服务异常的时候,数据丢失的风险。具体的统计逻辑可以
根据具体的需要去进行处理。这就是一个统计接口访问量的大致思路,没有具体的代码,思路搞清楚之后,写代码也会容易很多。
如果其他小伙伴有更好的思路,欢迎留言讨论。