Laravel中GraphQL接口请求频率实战记录
前言
起源:通常在产品的运行过程,我们可能会做数据埋点,以此来知道用户触发的行为,访问了多少页面,做了哪些操作,来方便产品根据用户喜好的做不同的调整和推荐,同样在服务端开发层面,也要做好“数据埋点”,去记录接口的响应时长、接口调用频率,参数频率等,方便我们从后端角度去分析和优化问题,如果遇到异常行为或者大量攻击来源,我们可以具体针对到某个接口去进行优化。
项目环境:
- framework:laravel 5.8+
- cache : redis >= 2.6.0
目前项目中几乎都使用的是 graphql 接口,采用的 package 是 php lighthouse graphql,那么主要的场景就是去统计好,graphql 接口的请求次数即可。
实现graphql record middleware
首先建立一个middleware 用于稍后记录接口的请求频率,在这里可以使用artisan 脚手架快速创建:
然后添加到 app/config/lighthouse.php middleware 配置中,或后添加到项目中 app/http/kernel.php 中,设置为全局中间件
获取 graphql operation name
获取到 operation name 之后,开始就通过在redis 来实现一个接口计数器。
添加接口计数器
首先要设置我们需要记录的时间,如5秒,60秒,半小时、一个小时、5个小时、24小时等,用一个数组来实现,具体可以根据自我需求来调整。
然后就开始添加对接口计数的逻辑,计数完成后,我们将其添加到zsset中,方便后续进行数据查询等操作。
然后请求一下接口,用medis查看一下数据。
查询、分析数据
数据记录完善后,可以通过opname 及 prec两个属性来查询,如查询24小时的tag接口访问数据
获取 tag 接口 24小时的访问统计
清除数据
完善一系列步骤后,我们可能需要将过期和一些不必要的数据进行清理,可以通过定时任务来进行定期清理,相关实现如下:
清理一个30天前的数据:
整合代码
我们将所有操作接口统计的代码,单独封装到一个类中,然后对外提供静态函数调用,既实现了职责单一,又方便集成到其他不同的模块使用。
在middleware中使用.
结尾
上诉代码就实现了基于graphql的请求频率记录,但是使用不止适用于graphql接口,也可以基于rest接口、模块计数等统计行为,只要有唯一的operation name即可。
到此这篇关于laravel中graphql接口请求频率的文章就介绍到这了,更多相关laravel中graphql接口请求频率内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: 怎样玩转Python
下一篇: python 获取微信公众号的文章