# API 配置管理(forge-starter-api-config)
API 端点自动注册与动态配置模块,支持启动时扫描 Controller 并自动注册到数据库,提供两级缓存和实时刷新能力。
## 快速开始
### 1. 引入依赖
```xml
com.mdframe.forge
forge-starter-api-config
```
### 2. 自动注册
模块启动时会自动扫描所有 Controller,将端点注册到 `sys_api_config` 表。
## 核心功能
### 自动注册
`ApiConfigAutoRegistrar` 在启动时通过 `RequestMappingHandlerMapping` 扫描所有 REST 端点,并解析以下标志位:
| 标志位 | 说明 | 解析方式 |
|--------|------|---------|
| `authFlag` | 是否需要认证 | 根据 `@ApiPermissionIgnore` / `@IgnoreTenant` 等注解推断 |
| `encryptFlag` | 是否需要加解密 | 根据 `@ApiEncrypt` / `@ApiDecrypt` 注解推断 |
| `tenantFlag` | 是否启用租户隔离 | 根据 `@IgnoreTenant` 注解推断 |
| `limitFlag` | 是否启用限流 | 根据 `@RateLimiter` 等注解推断 |
注册时会自动对比数据库中已存在的配置,增量更新。
### 两级缓存
API 配置查询采用 L1 + L2 两级缓存:
| 级别 | 存储 | 最大容量 | 过期时间 |
|------|------|---------|---------|
| L1 | Caffeine(本地) | 1000 | 10 分钟 |
| L2 | Redis | - | 30 分钟 |
**查询优先级**:L1 → L2 → 数据库
### 缓存预热
启动时自动预热所有已启用的 API 配置到缓存:
```yaml
forge:
api-config:
cache-warm-up: true
```
### 实时刷新
支持通过 Spring Event 实时刷新 API 配置:
```
修改数据库 → 发布 ApiConfigRefreshEvent → 清除缓存 → 重新加载
```
## 数据库表
### `sys_api_config`
| 字段 | 说明 |
|------|------|
| `api_name` | API 名称(如 "查询用户列表") |
| `api_code` | API 编码(唯一标识) |
| `req_method` | 请求方法(GET/POST/PUT/DELETE) |
| `url_path` | 请求路径(如 "/api/user/page") |
| `auth_flag` | 是否需要认证(0/1) |
| `encrypt_flag` | 是否加解密(0/1) |
| `tenant_flag` | 是否租户隔离(0/1) |
| `limit_flag` | 是否限流(0/1) |
| `sensitive_fields` | 敏感字段列表(JSON) |
| `status` | 状态(0=禁用,1=启用) |
| `module_code` | 所属模块编码 |
| `service_id` | 所属服务 ID |
## REST API
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/api-config/page` | 分页查询 API 配置 |
| GET | `/api/api-config/{id}` | 获取 API 配置详情 |
| PUT | `/api/api-config` | 更新 API 配置 |
| POST | `/api/api-config/refresh` | 手动触发配置刷新 |
| POST | `/api/api-config/cache/clear` | 清除所有缓存 |
| GET | `/api/api-config/cache/stats` | 获取缓存统计信息 |
## 配置项
```yaml
forge:
api-config:
enabled: true
auto-register: true
cache-warm-up: true
scan-packages: [] # 自定义扫描包路径(为空则扫描全部)
cache:
local:
max-size: 1000
expire-minutes: 10
redis:
enabled: true
expire-seconds: 1800
key-prefix: "api:config:"
```
## 核心组件
| 组件 | 说明 |
|------|------|
| `ApiConfigScanner` | 扫描 `RequestMappingHandlerMapping` 发现 API 端点 |
| `ApiConfigAutoRegistrar` | 自动注册 API 到数据库 |
| `IApiConfigManager` | API 配置管理接口 |
| `ApiConfigManagerImpl` | 实现类(支持数据库 > 注解 > 默认的优先级查询) |
| `ApiConfigContextHolder` | ThreadLocal 上下文持有者 |
| `ApiConfigRefreshListener` | 监听配置刷新事件 |
## 使用场景
### 运行时权限判断
```java
@Autowired
private IApiConfigManager apiConfigManager;
public boolean needAuth(String urlPath, String method) {
return apiConfigManager.needAuth(urlPath, method);
}
```
### 获取所有已启用的配置
```java
List configs = apiConfigManager.getAllEnabledConfigs();
```