--- name: api-naming description: PowerX API 命名与访问规范(/api/v1、/admin、/internal 边界)。 --- # PowerX API Naming ## 步骤 1) 打开 `本文件内嵌规则`。 2) 按规则执行实现/校对。 3) 完成后按核对清单验收。 ## 核对点 - 与 PowerX 当前代码结构、路径与命名一致。 - 仅在传输层/契约层做职责内改动,不跨层越界。 ## 规则(内嵌) ### api-naming.md ````markdown # PowerX API 命名与访问规范(全局) > 本文件定义 PowerX 平台所有 HTTP API 的路径前缀、用途边界、版本策略、鉴权与命名风格。适用于 CoreX 底座、插件框架、插件业务服务。 ## 1. 路径前缀与用途边界 ### 1.1 公共访问域(对外/客户端) - **/api/v1/**:对外开放的稳定 API(OpenAPI 可暴露) - 典型对象:租户端、开放平台、第三方客户端 - 版本语义:语义化版本 v1 / v2 - **/api/**:兼容入口(老路径或内部自用),可作为路由代理或重定向到 /api/v1 - 若 /api/v1 存在同名路径,优先迁移到 /api/v1 > **注意:APIPrefix 可配置**(`cfg.Server.APIPrefix`)。本文档使用 `/api` 作为默认示例,实际运行路径为 `/...`,常见取值:`/api` 或 `/api/v1`。 ### 1.2 管理/后台域(管理端/控制台) - **/api/v1/admin/**:管理端 API(带管理权限) - 典型对象:管理控制台、运营/内部管理系统 - 典型调用主体:PowerX Admin、插件 Admin 页面 - 鉴权语义:用户 JWT + tenant member + RBAC + 业务权限 - 必须带授权 token - 不作为插件服务态 STS 直连的默认开放域 ### 1.2.1 外部业务域(Web / Mini-app / Customer) - **/api/v1/**:外部业务开放 API - 典型对象:租户侧 Web、mini-app、customer portal、第三方客户端 - 典型调用主体:web user、mini-app user、customer actor、service actor - 鉴权语义:用户 JWT、customer token、API Key、OAuth client 或明确声明的 STS - 资源边界:默认 tenant-scoped;customer/mini-app 自助接口必须 owner-scoped/self-scoped - 不得复用 `/api/v1/admin/*` 的全量治理语义 ### 1.2.2 Capability 统一调用域 - **/api/v1/tenant/invocations**:服务态 capability 调度入口 - 典型对象:插件后端、agent、skill、系统集成 - 鉴权语义:STS/API Key/OAuth client + capability registration/grant - 语义:按 `capability_id` 调用已授权能力,而不是直接暴露后台路由 ### 1.3 内部/宿主域(仅内部使用) - **/internal/**:宿主/插件内部调用入口(不对公网开放) - 典型对象:PowerXPlugin Framework、CLI、宿主内部服务 - **必须最小化暴露,不写入公开 OpenAPI** - 允许与 /api/v1 同时存在,但用途必须明确区分 > 说明:已有历史文档/实现中使用 `/internal/*` 或 `/api/internal/*`,统一向 `/api/internal/*` 对齐。 --- ## 2. 版本策略 - 稳定对外接口必须挂在 `/api/v1`,有破坏性变更时升级 `/api/v2` - `/api/internal` 不承诺稳定版本,但变更需记录在变更日志 - `/api` 仅作为兼容入口或内部路由代理,不建议新功能落地 --- ## 3. 鉴权与租户透传 - **所有 `/api/v1/admin` 与 `/api/internal` 必须鉴权** - 租户信息必须通过 token(JWT claims)或 `tenant_uuid` 字段解析,不接受遗留租户头注入。 - 内部接口也需 tenant 校验,禁止跨租户调用 - 设计新接口前必须声明调用主体:`admin_user`、`service_actor`、`web_user`、`mini_app_user`、`customer_actor`。 - 后台用户态接口和外部业务接口即使操作同一资源,也必须按 actor、资源范围、风险等级和授权开关判断是否复用同一 capability。 - customer/mini-app 自助接口不得使用 admin 全量管理权限;默认只能访问当前 customer/user/owner 可见资源。 --- ## 4. 命名风格 ### 4.1 资源命名 - REST 资源采用名词复数: - `/api/v1/admin/agents` - `/api/v1/admin/knowledge-spaces` - `/api/v1/customer/accounts` ### 4.1.0 Actor 边界命名 - 后台管理:`/api/v1/admin/` - 示例:`/api/v1/admin/customer/accounts` - 外部业务/客户自助:`/api/v1//` 或 `/api/v1/customer/` - 示例:`/api/v1/customer/account` - 示例:`/api/v1/customer/orders` - 服务态开放接口:`/api/v1//`,必须在能力或接口文档中声明允许的 STS/API Key/OAuth actor - 示例:`/api/v1/scheduler/jobs` - 统一能力调度:`/api/v1/tenant/invocations` 路径前缀不等于 capability。`/api/v1/admin/` 与 `/api/v1/` 如果业务语义和授权边界一致,可以是同一个 capability 的不同 binding;如果 actor 可操作资源范围不同,必须拆 capability。 ### 4.1.1 插件相关命名 - 管理端插件资源:`/api/v1/admin/plugins/*` - 示例:`/api/v1/admin/plugins`、`/api/v1/admin/plugins/:id` - 宿主内部插件资源:`/api/internal/plugins/*` - 示例:`/api/internal/plugins/local/reload`、`/api/internal/plugins/environments/check` - 插件发布/治理内部分发:`/api/internal/version/*`、`/api/internal/notify/*` - 宿主模式插件前端入口(反代):`/_p//admin/` - 示例:`/_p/com.powerx.helloworld/admin/intro` - 宿主模式插件后端 API(反代):`/_p//api/` - 示例:`/_p/com.powerx.helloworld/api/healthz` ### 4.2 行为/动作 - 动作用 **子路径** 或 **操作端点**: - `/api/v1/admin/agents/:id/activate` - `/internal/ws-bus/publish` ### 4.3 异步任务 - 提交任务:`POST /.../tasks` - 查询任务:`GET /.../tasks/:taskId` --- ## 5. OpenAPI / 合同要求 - `/api/v1` 与 `/api/v1/admin` 必须有 OpenAPI 文档 - `/api/internal` 默认不在公开 OpenAPI 中暴露 - 任何新增对外接口必须更新 specs/contracts --- ## 6. 日志 / 追踪 / 审计 - 对外与管理接口必须具备 trace_id - `/api/internal` 必须记录 tenant/topic/trace_id(若涉及事件) --- ## 7. 示例 ### 7.1 对外 API ``` GET /api/v1/knowledge-spaces ``` ### 7.2 管理端 API ``` POST /api/v1/admin/agents/test/connection ``` ### 7.2.1 Customer / Mini-app API ``` GET /api/v1/customer/account PATCH /api/v1/customer/account/profile GET /api/v1/customer/orders ``` ### 7.2.2 Capability Invocation API ``` POST /api/v1/tenant/invocations GET /api/v1/tenant/capabilities ``` ### 7.3 内部 API ``` POST /internal/ws-bus/publish ``` ### 7.4 插件相关 API ``` GET /api/v1/admin/plugins POST /api/internal/plugins/local/reload GET /_p//admin/ GET /_p//api/healthz ``` --- ## 8. 变更记录 - 2026-02-03:首次定义 `/api/internal` 作为宿主/插件内部 API 前缀 ````