前言

起源:通常在产品的运行过程,我们可能会做数据埋点,以此来知道用户触发的行为,访问了多少页面,做了哪些操作,来方便产品根据用户喜好的做不同的调整和推荐,同样在服务端开发层面,也要做好“数据埋点”,去记录接口的响应时长、接口调用频率,参数频率等,方便我们从后端角度去分析和优化问题,如果遇到异常行为或者大量攻击来源,我们可以具体针对到某个接口去进行优化。

项目环境:

  • 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接口请求频率内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!