refactor(apis): 简化无参API调用并更新API文档

1. 移除多个列表/统计API的默认空参数和buildQueryString调用,简化无参请求
2. 新增健康检查、测试通知渠道等API端点
3. 更新API注释文档,修正端点计数、废弃接口替换说明
4. 调整环境导出接口的权限为管理员权限并使用adminGet
5. 修正webhook接口的废弃端点替换和注释描述
This commit is contained in:
Kris 2026-07-11 07:37:53 +08:00
parent ecb708bfea
commit abf5ae52e5
8 changed files with 48 additions and 28 deletions

View File

@ -24,7 +24,7 @@ export const updateAssetApi = (id, data) => apiAdminPut(`${URL}/${id}`, data)
export const deleteAssetApi = (id) => apiAdminDelete(`${URL}/${id}`) export const deleteAssetApi = (id) => apiAdminDelete(`${URL}/${id}`)
// ===== 统计与查询 ===== // ===== 统计与查询 =====
export const getAssetStatsApi = (params = {}) => apiGet(`${URL}/stats${buildQueryString(params)}`) export const getAssetStatsApi = () => apiGet(`${URL}/stats`)
export const getAssetByChecksumApi = (checksum) => export const getAssetByChecksumApi = (checksum) =>
apiGet(`${URL}/by-checksum/${checksum}`) apiGet(`${URL}/by-checksum/${checksum}`)

View File

@ -16,7 +16,7 @@ import { buildUrl, buildQueryString, MODULE_PATHS } from './base'
const URL = buildUrl(MODULE_PATHS.AUTH_PLUGIN) const URL = buildUrl(MODULE_PATHS.AUTH_PLUGIN)
// ===== 列表与总览 ===== // ===== 列表与总览 =====
export const getAuthPluginListApi = (params = {}) => apiGet(`${URL}${buildQueryString(params)}`) export const getAuthPluginListApi = () => apiGet(URL)
export const getAuthPluginOverviewApi = () => apiGet(`${URL}/overview`) export const getAuthPluginOverviewApi = () => apiGet(`${URL}/overview`)
// ===== Token 刷新策略 ===== // ===== Token 刷新策略 =====

View File

@ -6,10 +6,10 @@
* - 几乎所有端点都要求 system_id 作为 query 参数必填 * - 几乎所有端点都要求 system_id 作为 query 参数必填
* - set_default / test_connectivity 不接受请求体 * - set_default / test_connectivity 不接受请求体
* - set_enabled 请求体字段为 enabled is_enabled * - set_enabled 请求体字段为 enabled is_enabled
* - export 返回 StreamingResponse需用 blob 接收 * - export 返回 StreamingResponse需用 blob 接收后端统一要求管理员权限include_secrets 会泄露明文密钥
* - 查询类端点后端用 get_required_user普通用户可访问写操作get_admin_user * - 查询类端点后端用 get_required_user普通用户可访问写操作export get_admin_user
*/ */
import { apiGet, apiAdminPost, apiAdminPut, apiAdminDelete, apiAdminPatch } from '../base' import { apiGet, apiAdminGet, apiAdminPost, apiAdminPut, apiAdminDelete, apiAdminPatch } from '../base'
import { buildUrl, buildQueryString, MODULE_PATHS } from './base' import { buildUrl, buildQueryString, MODULE_PATHS } from './base'
const URL = buildUrl(MODULE_PATHS.ENVIRONMENT) const URL = buildUrl(MODULE_PATHS.ENVIRONMENT)
@ -61,12 +61,11 @@ export const testEnvironmentConnectivityApi = (id, systemId) =>
apiAdminPost(`${URL}/${id}/test-connectivity${buildQueryString({ system_id: systemId })}`) apiAdminPost(`${URL}/${id}/test-connectivity${buildQueryString({ system_id: systemId })}`)
// ===== 导出与健康 ===== // ===== 导出与健康 =====
// 后端 export_environment 返回 StreamingResponseapplication/octet-stream // 后端 export_environment 返回 StreamingResponse统一要求管理员权限include_secrets 会泄露明文密钥
export const exportEnvironmentApi = (id, systemId, params = {}) => export const exportEnvironmentApi = (id, systemId, params = {}) =>
apiGet( apiAdminGet(
`${URL}/${id}/export${buildQueryString({ system_id: systemId, ...params })}`, `${URL}/${id}/export${buildQueryString({ system_id: systemId, ...params })}`,
{}, {},
true,
'blob' 'blob'
) )
export const getEnvironmentHealthApi = (id, systemId) => export const getEnvironmentHealthApi = (id, systemId) =>

View File

@ -1,5 +1,5 @@
/** /**
* 22-通知渠道 API6 端点 * 22-通知渠道 API7 端点
* 路径前缀/notification-channels * 路径前缀/notification-channels
* *
* 对齐后端 Routerbackend/server/routers/external_systems/notification_channel_router.py * 对齐后端 Routerbackend/server/routers/external_systems/notification_channel_router.py
@ -7,6 +7,7 @@
* - 查询类端点GET后端用 get_required_user前端用 apiGet * - 查询类端点GET后端用 get_required_user前端用 apiGet
* - 写操作POST/PUT/DELETE后端用 get_admin_user前端用 apiAdmin* * - 写操作POST/PUT/DELETE后端用 get_admin_user前端用 apiAdmin*
* - GET 列表参数通过 buildQueryString 拼接到 URLapiGet 第二参数为 options params * - GET 列表参数通过 buildQueryString 拼接到 URLapiGet 第二参数为 options params
* - test 端点不持久化仅验证渠道配置是否正确
* *
* 响应字段契约对齐 NotificationChannelOutput / NotificationChannelStatsOutput DTO * 响应字段契约对齐 NotificationChannelOutput / NotificationChannelStatsOutput DTO
* - 列表项 / 详情{ id, channel_type, name, config, enabled, description, * - 列表项 / 详情{ id, channel_type, name, config, enabled, description,
@ -61,3 +62,12 @@ export const updateNotificationChannelApi = (id, data) => apiAdminPut(`${URL}/${
* @param {number} id - 渠道主键 * @param {number} id - 渠道主键
*/ */
export const deleteNotificationChannelApi = (id) => apiAdminDelete(`${URL}/${id}`) export const deleteNotificationChannelApi = (id) => apiAdminDelete(`${URL}/${id}`)
// ===== 测试 =====
/**
* 测试通知渠道连通性不持久化仅验证配置是否正确
* @param {number} id - 渠道主键
* @param {Object} [data] - { message? } 自定义测试消息内容
*/
export const testNotificationChannelApi = (id, data = {}) =>
apiAdminPost(`${URL}/${id}/test`, data)

View File

@ -26,7 +26,7 @@ export const deleteSystemApi = (id, cascade = false) =>
// ===== 导出与统计 ===== // ===== 导出与统计 =====
export const exportSystemsApi = (params = {}) => export const exportSystemsApi = (params = {}) =>
apiGet(`${URL}/export${buildQueryString(params)}`, {}, true, 'blob') apiGet(`${URL}/export${buildQueryString(params)}`, {}, true, 'blob')
export const getSystemStatsApi = (params = {}) => apiGet(`${URL}/stats${buildQueryString(params)}`) export const getSystemStatsApi = () => apiGet(`${URL}/stats`)
// ===== 批量操作 ===== // ===== 批量操作 =====
export const batchEnabledSystemsApi = (data) => apiAdminPost(`${URL}/batch-enabled`, data) export const batchEnabledSystemsApi = (data) => apiAdminPost(`${URL}/batch-enabled`, data)

View File

@ -9,7 +9,11 @@
* - 静态路径/stats/history/invalidate-environment/expiring必须在动态路径 /{token_id} 之前声明 * - 静态路径/stats/history/invalidate-environment/expiring必须在动态路径 /{token_id} 之前声明
* - access_token / refresh_token 后端默认脱敏为 "***"前端无需额外处理 * - access_token / refresh_token 后端默认脱敏为 "***"前端无需额外处理
* - history 端点按 system_id 查询审计日志返回 list[TokenHistoryItem]Token 字段 + 审计元数据非审计日志原始对象 * - history 端点按 system_id 查询审计日志返回 list[TokenHistoryItem]Token 字段 + 审计元数据非审计日志原始对象
* - usage 端点当前返回空列表占位list[dict]未实现使用记录采集 * - usage 端点基于 ExternalToolExecution 表按 (system_id, env_key) 关联查询返回工具执行记录摘要
* - stats 端点支持 expiring_days 参数控制 expiring_soon 阈值返回字段含 expired已过期未失效
* - detail 端点返回 system_name/system_slug 关联系统上下文
* - rotation-preview 端点返回 token_status + affected_policies密钥轮换策略
* - invalidate 端点幂等已失效的 Token 返回 409 ConflictError
*/ */
import { apiGet, apiAdminPost } from '../base' import { apiGet, apiAdminPost } from '../base'
import { buildUrl, buildQueryString, MODULE_PATHS } from './base' import { buildUrl, buildQueryString, MODULE_PATHS } from './base'
@ -17,30 +21,30 @@ import { buildUrl, buildQueryString, MODULE_PATHS } from './base'
const URL = buildUrl(MODULE_PATHS.TOKEN) const URL = buildUrl(MODULE_PATHS.TOKEN)
// ===== 列表与详情 ===== // ===== 列表与详情 =====
/** 分页列出 Token支持 system_id/env_key/token_type/is_invalidated 过滤 */ /** 分页列出 Token支持 system_id/env_key/token_type/is_invalidated 过滤DB 层下推 */
export const getTokenListApi = (params = {}) => apiGet(`${URL}${buildQueryString(params)}`) export const getTokenListApi = (params = {}) => apiGet(`${URL}${buildQueryString(params)}`)
/** 获取 Token 详情access_token/refresh_token 脱敏 */ /** 获取 Token 详情access_token/refresh_token 脱敏,含 system_name/system_slug 上下文 */
export const getTokenDetailApi = (id) => apiGet(`${URL}/${id}`) export const getTokenDetailApi = (id) => apiGet(`${URL}/${id}`)
// ===== 失效管理 ===== // ===== 失效管理 =====
/** 失效单条 Tokenadmin 权限,无 Body */ /** 失效单条 Tokenadmin 权限,幂等,已失效返回 409 */
export const invalidateTokenApi = (id) => apiAdminPost(`${URL}/${id}/invalidate`) export const invalidateTokenApi = (id) => apiAdminPost(`${URL}/${id}/invalidate`)
/** 按环境失效 Tokenadmin 权限,Body: {system_id, env_key} */ /** 按环境失效 Tokenadmin 权限,幂等,Body: {system_id, env_key} */
export const invalidateEnvironmentTokensApi = (data) => apiAdminPost(`${URL}/invalidate-environment`, data) export const invalidateEnvironmentTokensApi = (data) => apiAdminPost(`${URL}/invalidate-environment`, data)
// ===== 使用与轮换预览 ===== // ===== 使用与轮换预览 =====
/** 查询 Token 使用记录(当前返回空列表占位 */ /** 查询 Token 使用记录(基于 ExternalToolExecution 关联查询 */
export const getTokenUsageApi = (id, params = {}) => export const getTokenUsageApi = (id, params = {}) =>
apiGet(`${URL}/${id}/usage${buildQueryString(params)}`) apiGet(`${URL}/${id}/usage${buildQueryString(params)}`)
/** 轮换影响范围预览(只读,返回受影响的系统/环境/工具) */ /** 轮换影响范围预览(只读,返回 token_status + 受影响的系统/环境/工具/密钥轮换策略 */
export const getTokenRotationPreviewApi = (id) => apiGet(`${URL}/${id}/rotation-preview`) export const getTokenRotationPreviewApi = (id) => apiGet(`${URL}/${id}/rotation-preview`)
// ===== 统计与历史 ===== // ===== 统计与历史 =====
/** 查询 Token 统计(4 状态分组计数active/expiring_soon/invalidated/total */ /** 查询 Token 统计(5 状态分组total/active/invalidated/expired/expiring_soon支持 expiring_days 阈值 */
export const getTokenStatsApi = (params = {}) => apiGet(`${URL}/stats${buildQueryString(params)}`) export const getTokenStatsApi = (params = {}) => apiGet(`${URL}/stats${buildQueryString(params)}`)
/** 查询 Token 变更历史system_id 必填,基于审计日志 */ /** 查询 Token 变更历史system_id 必填,基于审计日志,含刷新成功/失败事件 */
export const getTokenHistoryApi = (params = {}) => apiGet(`${URL}/history${buildQueryString(params)}`) export const getTokenHistoryApi = (params = {}) => apiGet(`${URL}/history${buildQueryString(params)}`)
// ===== 过期预警 ===== // ===== 过期预警 =====
/** 查询即将过期的 Tokendays 默认 7范围 1-90 */ /** 查询即将过期的 Tokendays 默认 7范围 1-90system_id 透传 DB 层过滤 */
export const getExpiringTokensApi = (params = {}) => apiGet(`${URL}/expiring${buildQueryString(params)}`) export const getExpiringTokensApi = (params = {}) => apiGet(`${URL}/expiring${buildQueryString(params)}`)

View File

@ -1,5 +1,5 @@
/** /**
* 02-工具管理 API21 端点 * 02-工具管理 API22 端点
* 路径前缀/tools * 路径前缀/tools
* *
* 对齐 backend/server/routers/external_systems/tool_router.py * 对齐 backend/server/routers/external_systems/tool_router.py
@ -8,6 +8,7 @@
* - get_tool / delete_tool 接受可选 system_id query * - get_tool / delete_tool 接受可选 system_id query
* - export-wsdl 后端返回普通 JSON StreamingResponsesystem_id 必填 * - export-wsdl 后端返回普通 JSON StreamingResponsesystem_id 必填
* - export 后端返回 StreamingResponse需用 blob 接收 * - export 后端返回 StreamingResponse需用 blob 接收
* - health-check 后端用 get_admin_user请求体可选 env_key
*/ */
import { apiGet, apiPost, apiAdminPost, apiAdminPut, apiAdminDelete } from '../base' import { apiGet, apiPost, apiAdminPost, apiAdminPut, apiAdminDelete } from '../base'
import { buildUrl, buildQueryString, MODULE_PATHS } from './base' import { buildUrl, buildQueryString, MODULE_PATHS } from './base'
@ -43,6 +44,11 @@ export const importToolsFromWsdlApi = (data) => apiAdminPost(`${URL}/import-from
export const executeToolApi = (data) => apiPost(`${URL}/execute`, data) export const executeToolApi = (data) => apiPost(`${URL}/execute`, data)
export const batchExecuteToolsApi = (data) => apiPost(`${URL}/batch-execute`, data) export const batchExecuteToolsApi = (data) => apiPost(`${URL}/batch-execute`, data)
// ===== 健康检查 =====
// 后端 health_check_external_tool 用 get_admin_user请求体可选 env_key
export const healthCheckToolApi = (id, data = {}) =>
apiAdminPost(`${URL}/${id}/health-check`, data)
// ===== 批量克隆 ===== // ===== 批量克隆 =====
export const batchCloneToolsApi = (data) => apiAdminPost(`${URL}/batch-clone`, data) export const batchCloneToolsApi = (data) => apiAdminPost(`${URL}/batch-clone`, data)

View File

@ -1,15 +1,16 @@
/** /**
* 12-Webhook 管理 API20 端点 * 12-Webhook 管理 API19 端点
* 路径前缀/webhooks * 路径前缀/webhooks
* *
* 对齐后端 Routerbackend/server/routers/external_systems/webhook_router.py * 对齐后端 Routerbackend/server/routers/external_systems/webhook_router.py
* 后端共 21 个端点前端导出 19 排除无认证回调 POST /events 和已废弃的 GET /events/{id}/deliveries
* *
* 关键对齐点 * 关键对齐点
* - GET 端点subscriptions / events / failed / expiring / renewal-failures / * - GET 端点subscriptions / events / failed / expiring / renewal-failures /
* detail / deliveries / filter-rules / transform-rules均用 get_required_user apiGet * detail / processing-status / filter-rules / transform-rules均用 get_required_user apiGet
* - POST / PUT / DELETE 端点均用 get_admin_user apiAdminPost / apiAdminPut / apiAdminDelete * - POST / PUT / DELETE 端点均用 get_admin_user apiAdminPost / apiAdminPut / apiAdminDelete
* - params GET 请求通过 buildQueryString 拼接apiGet 第二参数是 fetch options * - params GET 请求通过 buildQueryString 拼接apiGet 第二参数是 fetch options
* - POST /events 为外部系统回调入口无认证前端不调用故本文件导出 19 个前端可用端点 * - 后端 /events/{id}/deliveries 已废弃统一使用 /events/{id}/processing-status
* - 后端响应均为 dictJSON StreamingResponse无需 'blob' * - 后端响应均为 dictJSON StreamingResponse无需 'blob'
*/ */
import { apiGet, apiAdminPost, apiAdminPut, apiAdminDelete } from '../base' import { apiGet, apiAdminPost, apiAdminPut, apiAdminDelete } from '../base'
@ -67,16 +68,16 @@ export const testWebhookSubscriptionApi = (id, data) =>
export const verifyWebhookSignatureApi = (id, data) => export const verifyWebhookSignatureApi = (id, data) =>
apiAdminPost(`${URL}/subscriptions/${id}/verify-signature`, data) apiAdminPost(`${URL}/subscriptions/${id}/verify-signature`, data)
// ===== 事件列表 / 失败事件 / 投递历史 ===== // ===== 事件列表 / 失败事件 / 处理状态 =====
/** 分页列出 Webhook 事件 */ /** 分页列出 Webhook 事件 */
export const getWebhookEventListApi = (params = {}) => export const getWebhookEventListApi = (params = {}) =>
apiGet(`${URL}/events${buildQueryString(params)}`) apiGet(`${URL}/events${buildQueryString(params)}`)
/** 列出处理失败的 Webhook 事件 */ /** 列出处理失败的 Webhook 事件 */
export const getFailedWebhookEventsApi = (params = {}) => export const getFailedWebhookEventsApi = (params = {}) =>
apiGet(`${URL}/events/failed${buildQueryString(params)}`) apiGet(`${URL}/events/failed${buildQueryString(params)}`)
/** 查询 Webhook 事件投递历史 */ /** 查询 Webhook 事件处理状态(替代已废弃的 /deliveries 端点) */
export const getWebhookEventDeliveriesApi = (id) => export const getWebhookEventProcessingStatusApi = (id) =>
apiGet(`${URL}/events/${id}/deliveries`) apiGet(`${URL}/events/${id}/processing-status`)
// ===== 事件重放 ===== // ===== 事件重放 =====
/** 重放 Webhook 事件 */ /** 重放 Webhook 事件 */