API 开放平台的系统架构优化
为了提高 API 开放平台的性能和可扩展性,需要对系统架构进行优化。本文主要介绍引入网关优化
统计用户调用接口次数
为了更好地管理用户对接口的使用,开发接口调用次数统计功能。当用户每次调用接口成功时,次数加 1。同时,我们设计用户接口关系表user_interface_info
,用于存储用户与接口的调用关系,包括用户 ID、接口 ID、总调用次数、剩余调用次数、状态、创建时间、更新时间和是否删除等字段。
业务流程:
- 用户每次调用接口成功,次数+1
- 给用户分配或用户自主申请接口调用次数
用户接口关系表user_interface_info
:
字段 | 类型 | 说明 |
---|---|---|
id | bigint | 主键 |
userId | bigint | 调用用户id |
interfaceInfoId | bigint | 接口id |
totalNum | int | 总调用次数 |
leftNum | int | 剩余调用次数 |
status | int | 0-正常 1-禁用 |
createTime | datetime | 创建时间 |
updateTime | datetime | 更新时间 |
isDelete | tinyint | 是否删除 |
调用次数增加
后端代码:
@Override
public boolean invokeCount(long interfaceInfoId, long userId) {
// 判断
if (interfaceInfoId <= 0 || userId <= 0) {
throw new BusinessException(ErrorCode.PARAMS_ERROR);
}
UpdateWrapper<UserInterfaceInfo> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("interfaceInfoId", interfaceInfoId);
updateWrapper.eq("userId", userId);
updateWrapper.setSql("leftNum = leftNum - 1, totalNum = totalNum + 1");
return this.update(updateWrapper);
}
那么,如何在每次调用接口时实现次数统计呢?我们有以下两种方式:
-
使用 AOP 切面:AOP(面向切面编程)切面可以在不修改原有接口代码的情况下,实现对接口调用次数的统计。其优点是独立于接口,能够在每个接口调用后自动统计次数加 1。然而,AOP 切面也存在一些缺点。它通常只存在于单个项目中,如果每个团队都要开发自己的模拟接口,那么每个团队都需要写一个切面,这会导致代码的重复和维护成本的增加。
-
使用网关:网关可以统一处理接口调用次数的统计问题。它的优势在于能够集中管理和控制接口的访问,对所有通过网关的接口调用进行统一的处理。相比 AOP 切面,网关的优势更加明显。它可以避免每个团队都要开发和维护自己的统计逻辑,减少了重复工作。同时,网关还可以处理其他与接口调用相关的问题,如路由、鉴权、限流等,提供了更全面的接口管理功能。