Refresh architecture, development, operations, and quickstart docs. Update multi-language README files.
5.4 KiB
API 文档
本页说明 IoT DC3 后端 OpenAPI / Swagger 文档的生成、访问、认证和导出方式。它补充 测试 与根目录 AGENTS.md
中的工程规则。
平台在 WebFlux 栈上使用 springdoc-openapi 3.0.3。REST 接口文档由代码注解生成,包括 @Tag、@Operation、@Parameter 和
@Schema,不维护独立的手写 API 规格文件。
架构
+--------------------------------------------+
Browser | dc3-gateway (:8000) |
/swagger-ui.html ----> | Aggregated Swagger UI (service selector) |
| springdoc.swagger-ui.urls -> 4 centers |
+--------+-----------+-----------+-----------+
/v3/api-docs/auth | /manager | /data | /agentic
v v v
+------------+ +----------+ +----------+ +----------+
| auth :8300 | | mgr:8400 | | data:8500| |agentic |
| /auth/... | | /manager | | /data | | :8600 |
+------------+ +----------+ +----------+ +----------+
group=auth manager data agentic
分组方式
| 机制 | 说明 |
|---|---|
| Center 分组 | 每个业务模块提供自己的 GroupedOpenApi Bean,只扫描本模块 Controller 包 |
| 全局元信息 | dc3-common-web 中的 SpringDocConfig 提供 OpenAPI 标题、版本、联系人、许可证和安全方案 |
| Gateway 聚合 | Gateway 没有业务 Controller,通过 springdoc.swagger-ui.urls 聚合各中心服务文档 |
| Single 模式 | dc3-center-single 同时包含多个业务模块,因此 UI 中会出现多个分组 |
SpringDocConfig 和 WebFluxSecurityConfig 放在 dc3-common-web 的 auto-configuration 中,因为 Center
应用只扫描自身包路径。各业务模块的 GroupedOpenApi 放在本模块已扫描包下,由已有初始化逻辑加载。
访问入口
| 目标 | URL |
|---|---|
| Gateway 聚合 UI | http://<gateway>:8000/swagger-ui.html |
| Auth Center 直连 | http://<auth>:8300/auth/swagger-ui.html |
| Manager Center 直连 | http://<manager>:8400/manager/swagger-ui.html |
| Data Center 直连 | http://<data>:8500/data/swagger-ui.html |
| Agentic Center 直连 | http://<agentic>:8600/agentic/swagger-ui.html |
| 单中心 JSON | http://<center>:<port>/<svc>/v3/api-docs |
各中心服务的 spring.webflux.base-path 会加到文档路径前,例如 /auth/v3/api-docs。Gateway 聚合路径 /v3/api-docs/{svc}
会隐藏这个差异,便于统一访问。
Swagger UI 认证
除 /auth/token/* 外,多数接口需要通过 Gateway 认证头调用。开发环境中可按以下步骤操作:
- 调用
POST /api/v3/auth/token/salt,请求体示例:{"name":"dc3","tenant":"default"}。 - 计算
md5(md5(password) + salt)。 - 调用
POST /api/v3/auth/token/generate获取 token。 - 在 Swagger UI 点击 Authorize,填写:
| Header | 示例 |
|---|---|
X-Auth-Tenant |
default |
X-Auth-Login |
dc3 |
X-Auth-Token |
{"salt":"...","token":"..."} |
不要把真实 token、password、api key 写入文档、日志或 issue。
环境暴露规则
API 文档在 dev、test、pre 环境可用,生产环境关闭。共享配置 application-web.yml 的 pro profile 会设置:
springdoc:
api-docs:
enabled: false
swagger-ui:
enabled: false
安全白名单允许文档路径本身访问;生产环境中 springdoc 端点不存在,因此不会暴露文档内容。
注解约定
- 注解文字使用英文,符合
AGENTS.md对用户可见代码文本的要求。 @Operation摘要应遵循 CRUD 动词和结果基数约定:add、delete、update、getXxx、listXxx。- 请求/响应 DTO 字段使用
@Schema标明description,必要时补充example和requiredMode = REQUIRED。 - 不在
@Schema示例中放apiKey、password、secret、token等敏感值。 - 接口统一返回
R<T>响应封装,包含ok、code、message、data。
导出 OpenAPI JSON
make openapi 会从运行中的开发或测试栈导出各中心服务的 OpenAPI JSON:
make openapi
可通过变量覆盖导出入口和输出目录:
make openapi OPENAPI_BASE=http://localhost:8000 OPENAPI_OUT=build/openapi
该命令适合生成离线契约快照或提供给客户端生成工具。
新增接口时的文档要求
- Controller 类增加
@Tag(name = "...", description = "...")。 - 方法增加
@Operation(summary = "...", description = "...")。 - 路径参数、查询参数和请求体参数增加
@Parameter。 - 请求/响应 DTO 字段增加
@Schema。 - 新增业务模块时,补充
GroupedOpenApiBean、Gateway 聚合配置和 Swagger UI 分组。