Linux环境下Swagger API文档版本控制实践
一 版本控制总览
二 目录与分支策略
api-spec/
├── specs/
│ ├── v1/
│ │ ├── openapi.yaml
│ │ └── components.yaml
│ └── v2/
│ ├── openapi.yaml
│ └── components.yaml
├── README.md
└── .gitignore
三 规范层面的版本管理
openapi: 3.0.0
info:
title: 用户服务 API
version: 2.0.0
paths:
/api/v1/users:
get:
summary: 获取用户列表 v1
responses:
'200':
description: OK
/api/v2/users:
get:
summary: 获取用户列表 v2(含分页)
responses:
'200':
description: OK
四 运行时多版本发布与展示
// swagger-v1.js
const swaggerJsDoc = require('swagger-jsdoc');
const swaggerOptionsV1 = {
swaggerDefinition: { openapi: '3.0.0', info: { title: 'API', version: '1.0.0' } },
apis: ['./routes/v1/*.js'],
};
const swaggerDocsV1 = swaggerJsDoc(swaggerOptionsV1);
// swagger-v2.js
const swaggerOptionsV2 = {
swaggerDefinition: { openapi: '3.0.0', info: { title: 'API', version: '2.0.0' } },
apis: ['./routes/v2/*.js'],
};
const swaggerDocsV2 = swaggerJsDoc(swaggerOptionsV2);
const express = require('express');
const swaggerUi = require('swagger-ui-express');
const app = express();
app.use('/api-docs/v1', swaggerUi.serve, swaggerUi.setup(swaggerDocsV1));
app.use('/api-docs/v2', swaggerUi.serve, swaggerUi.setup(swaggerDocsV2));
app.listen(3000, () => console.log('Docs: /api-docs/v1 | /api-docs/v2'));
@Configuration
public class SwaggerConfig {
@Bean
public Docket v1() {
return new Docket(DocumentationType.OAS_30)
.groupName("v1")
.select().apis(RequestHandlerSelectors.basePackage("com.example.controller.v1")).paths(PathSelectors.any()).build()
.apiInfo(new ApiInfoBuilder().title("API v1").version("1.0").build());
}
@Bean
public Docket v2() {
return new Docket(DocumentationType.OAS_30)
.groupName("v2")
.select().apis(RequestHandlerSelectors.basePackage("com.example.controller.v2")).paths(PathSelectors.any()).build()
.apiInfo(new ApiInfoBuilder().title("API v2").version("2.0").build());
}
}
// 访问:/swagger-ui/ 可见 v1、v2 分组
五 协作与发布流程
# 校验
npx swagger-cli validate specs/v2/openapi.yaml
# 生成 Java 客户端
wget https://repo1.maven.org/maven2/io/swagger/openapi-generator-cli/2.4.21/openapi-generator-cli-2.4.21.jar -O openapi-generator.jar
java -jar openapi-generator-cli-2.4.21.jar generate -i specs/v2/openapi.yaml -g java -o ./gen/v2-client
# 运行 Swagger Editor(本地预览差异)
wget https://github.com/swagger-api/swagger-editor/archive/refs/tags/v4.6.0.tar.gz
tar -xvf v4.6.0.tar.gz && cd swagger-editor-4.6.0
npm install && nohup npm start &
# 浏览器打开 http://<server>:8080,通过 File → Open URL 打开 specs/v1/openapi.yaml 与 specs/v2/openapi.yaml 对比