Files
2026-04-27 10:12:21 +08:00

101 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# API 管理 admin 接口
## 基本信息
- 模块sys_api
- 资源API 管理
-admin
- 鉴权:默认 `PrivateGroup`,需要 `JWT + Casbin``/api/freshCasbin``PublicGroup`
- 审计:除 `getAllApis/getApiList/getApiRoles/freshCasbin` 外,其余接口启用 `OperationRecord`
- 前缀:`/api`
- 模型:`system.SysApi``system.SysIgnoreApi`;搜索:`systemReq.SearchApiParams`;角色绑定:`systemReq.SetApiAuthorities`
- 返回:统一 `response.Response`
## 接口
| 动作 | Method | 路径 | 入参 | 返回重点 |
|:---|:---|:---|:---|:---|
| 创建 API | `POST` | `/api/createApi` | `system.SysApi` body | 操作结果 |
| 删除 API | `POST` | `/api/deleteApi` | `system.SysApi` body仅需 `ID` | 操作结果 |
| 批量删除 API | `DELETE` | `/api/deleteApisByIds` | `request.IdsReq` body | 操作结果 |
| 更新 API | `POST` | `/api/updateApi` | `system.SysApi` body | 操作结果 |
| API 详情 | `POST` | `/api/getApiById` | `request.GetById` body | `api` |
| API 分页列表 | `POST` | `/api/getApiList` | `systemReq.SearchApiParams` body | `response.PageResult` |
| 全量 API 列表 | `POST` | `/api/getAllApis` | 无 | `apis` |
| API 分组 | `GET` | `/api/getApiGroups` | 无 | `groups/apiGroupMap` |
| 预览同步差异 | `GET` | `/api/syncApi` | 无 | `newApis/deleteApis/ignoreApis` |
| 忽略/取消忽略 API | `POST` | `/api/ignoreApi` | `system.SysIgnoreApi` body | 操作结果 |
| 确认同步路由 | `POST` | `/api/enterSyncApi` | 空 body 或 `systemRes.SysSyncApis` | 操作结果 |
| 获取 API 关联角色 | `GET` | `/api/getApiRoles` | `path/method` query | `uint[]` |
| 覆盖 API 关联角色 | `POST` | `/api/setApiRoles` | `systemReq.SetApiAuthorities` body | 操作结果 |
| 刷新 Casbin 缓存 | `GET` | `/api/freshCasbin` | 无 | 操作结果 |
## 请求字段
### SysApi Body
| 字段 | 类型 | 必填 | 说明 |
|:---|:---|:---:|:---|
| ID | uint | 更新/删除必填 | API ID来自 `global.GVA_MODEL` 的 JSON 字段 |
| path | string | 创建/更新必填 | API 路径 |
| description | string | 创建/更新必填 | API 中文描述 |
| apiGroup | string | 创建/更新必填 | API 分组 |
| method | string | 创建/更新必填 | HTTP Method |
### SearchApiParams Body
| 字段 | 类型 | 必填 | 说明 |
|:---|:---|:---:|:---|
| page/pageSize | int | 是 | 页码/每页数量 |
| path | string | 否 | API 路径筛选 |
| description | string | 否 | API 描述筛选 |
| apiGroup | string | 否 | API 分组筛选 |
| method | string | 否 | HTTP Method 筛选 |
| orderKey | string | 否 | 排序字段 |
| desc | bool | 否 | 是否倒序 |
### SysIgnoreApi Body
| 字段 | 类型 | 必填 | 说明 |
|:---|:---|:---:|:---|
| path | string | 是 | API 路径 |
| method | string | 是 | HTTP Method |
| flag | bool | 是 | `true` 写入忽略;`false` 取消忽略 |
### 其他 Body/Query
| 场景 | 字段 | 类型 | 必填 | 说明 |
|:---|:---|:---|:---:|:---|
| getApiById | id | int | 是 | API ID此处使用 `request.GetById`,字段为小写 `id` |
| deleteApisByIds | ids | int[] | 是 | API ID 数组 |
| enterSyncApi | newApis | system.SysApi[] | 否 | 兼容旧请求体;传入时按列表新增 |
| enterSyncApi | deleteApis | system.SysApi[] | 否 | 兼容旧请求体;传入时按列表删除 |
| getApiRoles | path | string | 是 | API 路径 |
| getApiRoles | method | string | 是 | HTTP Method |
| setApiRoles | path | string | 是 | API 路径 |
| setApiRoles | method | string | 是 | HTTP Method |
| setApiRoles | authorityIds | uint[] | 是 | 全量覆盖后的角色 ID 列表 |
## 响应字段
| 场景 | 字段 | 类型 | 说明 |
|:---|:---|:---|:---|
| getApiById | api | object | `system.SysApi` |
| getApiList | list/total/page/pageSize | mixed | 分页结果 |
| getAllApis | apis | array | `system.SysApi` 列表 |
| getApiGroups | groups | string[] | API 分组列表 |
| getApiGroups | apiGroupMap | object | 路径首段到 API 分组映射 |
| syncApi | newApis/deleteApis/ignoreApis | array | 待新增、待删除、已忽略 API |
| getApiRoles | data | uint[] | 角色 ID 列表 |
## 规则
- `path + method` 唯一;创建重复 API 返回失败。
- `/api/syncApi` 只预览差异,不写库。
- `/api/enterSyncApi` 空 body 时以 `global.GVA_ROUTERS` 为事实来源同步 `sys_apis`
- 同步时新路由按 `path + method` 新增;已有路由保留人工维护的 `description/apiGroup`
- `sys_ignore_apis` 中的 `path + method` 不写入 `sys_apis`
- 当前路由表不存在的旧 API 从 `sys_apis` 删除,并清理对应 Casbin 权限。
- `setApiRoles` 为全量覆盖,成功后刷新 Casbin 缓存。
- 默认管理员角色 `888` 必须具备 `/api/getApiRoles``/api/setApiRoles` 权限。