在 Debian 上实现 Swagger 扩展功能
一 环境准备与工具链
- 更新系统并安装基础工具:Node.js 与 npm(用于 Express/swagger-ui-express/swagger-jsdoc),或 OpenJDK 11+ 与 Maven(用于 Spring Boot/springdoc-openapi)。
- 建议版本与命令示例:
- Node.js(通过 NodeSource,示例为 14.x):
- curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
- sudo apt install -y nodejs
- Java 与 Maven:
- sudo apt install -y openjdk-11-jdk maven
- 验证:node -v、npm -v、java -version、mvn -v。以上为后续扩展功能(UI 定制、注解生成、网关集成等)的基础环境。
二 UI 外观与行为扩展
- 使用 swagger-ui-express 托管文档,并通过配置实现深度链接、布局与插件等扩展:
- 关键配置项:deepLinking、layout、presets、plugins、requestInterceptor/responseInterceptor。
- 引入自定义资源:通过 customCss/customJs 或 customCssUrl/customJsUrl 覆盖样式与脚本,实现品牌色、Logo、隐藏元素、扩展按钮等。
- 示例(Express):
- 安装:npm install express swagger-ui-express swagger-jsdoc yamljs
- 代码片段:
- const express = require(‘express’); const swaggerUi = require(‘swagger-ui-express’); const YAML = require(‘yamljs’);
- const swaggerDocument = YAML.load(‘./swagger.yaml’); const app = express();
- app.use(‘/api-docs’, swaggerUi.serve, swaggerUi.setup(swaggerDocument, {
deepLinking: true, layout: ‘StandaloneLayout’,
presets: [swaggerUi.presets.apis, swaggerUi.presets.topbar],
customCssUrl: ‘/custom/custom.css’, customJsUrl: ‘/custom/custom.js’,
requestInterceptor: (req) => { /* 可统一注入 Authorization */ return req; }
}));
- app.listen(3000, () => console.log(‘Docs at http://localhost:3000/api-docs’));
- 静态资源与主题深度定制:使用 swagger-ui-dist 静态资源替换内置 CSS/JS/图片,实现主题级深度定制。
三 从代码生成规范与注解扩展
- Node.js 生态:使用 swagger-jsdoc 从 JSDoc 注解自动生成 OpenAPI 3.0 规范,减少手工维护成本。
- 配置要点:定义 openapi、info、servers,并通过 apis 指定扫描路径(如 ./routes/*.js)。
- 路由注解示例:
- /**
- app.get(‘/users’, (req, res) => res.json([{ id: 1, name: ‘Alice’ }]));
- Java 生态(Spring Boot):推荐使用 springdoc-openapi(替代旧版 Springfox),零配置自动生成文档,并通过注解丰富元数据:
- 依赖示例(Maven):
-
- org.springdoc
- springdoc-openapi-starter-webmvc-ui
- 1.6.14
-
- 常用注解:@Tag、@Operation、@Parameter、@ApiResponse。
- 访问地址:启动后打开 http://localhost:8080/swagger-ui/index.html。
四 部署与多服务治理扩展
- Docker 化部署:使用官方镜像快速托管规范与 UI,便于环境一致与快速发布。
- 命令示例:
- docker pull swaggerapi/swagger-ui
- docker run -p 8080:8080 -e SWAGGER_JSON=/spec/openapi.yaml -v $(pwd)/spec:/spec swaggerapi/swagger-ui
- 多文档共存与反向代理:基于 Nginx 将不同规范挂载到不同路径,实现多项目/多版本文档托管。
- Nginx 示例片段:
- location /docs1/ { proxy_pass http://127.0.0.1:8080/; proxy_set_header X-Forwarded-Prefix /docs1; }
- location /docs2/ { proxy_pass http://127.0.0.1:8081/; proxy_set_header X-Forwarded-Prefix /docs2; }
- 微服务治理集成:Swagger/OpenAPI 负责契约与文档,治理需结合 API 网关(如 Kong、Nginx)、服务注册与发现(如 Consul、Eureka)、熔断/限流/安全 等组件;可将网关作为统一入口暴露聚合文档,配合 DevOps(Jenkins、GitLab CI/CD) 实现自动化构建、部署与文档发布。