七、API 接口分析功能

主要内容:

  1. 开发抽象公共服务
  2. 实现网关核心业务流程
  3. 开发管理员接口分析功能
  4. 上线分析和发展

梳理网关业务流程

一下操作可以复用:

  1. 实际情况应该是去数据库中查询是否已分配给用户秘钥(accessKey, secretKey 是否合法)
    1. 先根据 accessKey 判断用户是否存在,查到 secretKey
    2. 对比 secretKey 和用户传的加密后的 secretKey 是否一致
  2. 从数据库中查询模拟接口是否存在,以及请求方法是否匹配(还可以校验参数)
  3. 调用成功,接口调用次数 + 1 invokeCount

临时问题:如何获取接口转发服务器的地址

思路:网关启动时,获取所有的接口信息,维护到内存的 hashmap 中;有请求时,根据请求的 URL 路径或其他参数(比如 host 请求头) 来判断应该转发到哪台服务器、以及用户校验接口是否存在

抽象公共服务

项目名:mofeng-common

目的是让方法、实体类在多个项目之间复用,提高代码复用率。

服务抽取:

  1. 数据库中查询是否已分配给用户秘钥(根据 accessKey, 拿到用户信息,返回用户信息,为空表示不存在)
  2. 从数据库中查询模拟接口是否存在(请求方法、请求路径、请求参数、返回接口信息,为空表示不存在)
  3. 调用成功,接口调用次数 + 1 invokeCount (accessKey、secretKey (标识用户),请求接口路径)

步骤:

  1. 新建干净的 maven 项目,只保留必要的公共依赖
  2. 抽取 service 和实体类
  3. install 本地 maven 包
  4. 让服务提供者引入 common 包,测试是否正常运行
  5. 让服务消费者引入 common 包

统计分析功能

需求

各接口的总调用次数占比(饼图)取调用最多的前 3 个接口,从而分析哪些属于废弃接口(降低资源、或者下线),高频接口(增加资源、提高收费)

用饼图展示

实现

前端

可以使用现成的库

比如:

如果是 React 项目,ECharts 用这个库:https://github.com/hustcc/echarts-for-react

后端

编写一个接口,得到下列示例数据:

接口 A:2 次(调用)

接口 B:4 次(调用)

202301122208482

步骤:

  1. SQL 查询调用数据:

    1
    2
    3
    4
    5
    select interfaceInfoId,sum(totalNum) as totalNum
    from user_interface_info
    group by interfaceInfoId
    order by totalNum desc
    limit 3
  2. 业务层去关联查询接口信息

上线计划

前端:直接打包部署即可

后端:

  • 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 的页面。