七、API 接口分析功能
七、API 接口分析功能
主要内容:
- 开发抽象公共服务
- 实现网关核心业务流程
- 开发管理员接口分析功能
- 上线分析和发展
梳理网关业务流程
一下操作可以复用:
- 实际情况应该是去数据库中查询是否已分配给用户秘钥(accessKey, secretKey 是否合法)
- 先根据 accessKey 判断用户是否存在,查到 secretKey
- 对比 secretKey 和用户传的加密后的 secretKey 是否一致
- 从数据库中查询模拟接口是否存在,以及请求方法是否匹配(还可以校验参数)
- 调用成功,接口调用次数 + 1 invokeCount
临时问题:如何获取接口转发服务器的地址
思路:网关启动时,获取所有的接口信息,维护到内存的 hashmap 中;有请求时,根据请求的 URL 路径或其他参数(比如 host 请求头) 来判断应该转发到哪台服务器、以及用户校验接口是否存在
抽象公共服务
项目名:mofeng-common
目的是让方法、实体类在多个项目之间复用,提高代码复用率。
服务抽取:
- 数据库中查询是否已分配给用户秘钥(根据 accessKey, 拿到用户信息,返回用户信息,为空表示不存在)
- 从数据库中查询模拟接口是否存在(请求方法、请求路径、请求参数、返回接口信息,为空表示不存在)
- 调用成功,接口调用次数 + 1 invokeCount (accessKey、secretKey (标识用户),请求接口路径)
步骤:
- 新建干净的 maven 项目,只保留必要的公共依赖
- 抽取 service 和实体类
- install 本地 maven 包
- 让服务提供者引入 common 包,测试是否正常运行
- 让服务消费者引入 common 包
统计分析功能
需求
各接口的总调用次数占比(饼图)取调用最多的前 3 个接口,从而分析哪些属于废弃接口(降低资源、或者下线),高频接口(增加资源、提高收费)
用饼图展示
实现
前端
可以使用现成的库
比如:
- ECharts:https://echarts.apache.org/zh/index.html (推荐)
- AntV:https://antv.vision/ (推荐)
- BizCharts
如果是 React 项目,ECharts 用这个库:https://github.com/hustcc/echarts-for-react
后端
编写一个接口,得到下列示例数据:
接口 A:2 次(调用)
接口 B:4 次(调用)
步骤:
SQL 查询调用数据:
1
2
3
4
5select interfaceInfoId,sum(totalNum) as totalNum
from user_interface_info
group by interfaceInfoId
order by totalNum desc
limit 3业务层去关联查询接口信息
上线计划
前端:直接打包部署即可
后端:
- backend 项目:web 项目,部署 spring boot 的 jar 包(对外)
- gateway 项目:web 项目,部署 spring boot 的 jar 包(对外)
- interface 项目:web 项目,部署 spring boot 的 jar 包(对内)
关键:网络必须联通
项目由自己学习使用:单个服务器部署这三个项目就足够了
安全可靠:多个服务器建议在 同一内网,内网交互会更快、且更安全
扩展思路
1.用户可以申请更换签名
2.怎么让其他用户也上传接口?
需要提供一个机制(界面),让用户输入自己的接口 host (服务器地址)、接口信息,将接口信息写入数据库,可以在 interfaceInfo 表里添加一个 host 字段,区分服务器地址,让接口提供者更地接入系统
将接口信息写入数据库之前,要对接口进行校验(比如检查地址是否遵循规则,测试调用),保证接口使用正常
将接口信息写入数据库之前遵循本系统的要求(并且使用本系统的 SDK)
在接入时,平台需要测试调用这个接口,保证接口可以正常使用
3.网关校验是否还有调用次数
需要考虑并发问题,防止瞬间调用超额
4.网关优化
比如增加限流 / 降级保护,提高性能等。还可以考虑搭配 Nginx 网关使用
5.更能增强
可以针对不同的请求头或者接口类型来设计前端界面和表单,便于用户调用,获得更好的体验。
可以参考 swagger、postman、knife4j 的页面。