linux

Linux环境中Swagger API文档如何版本控制

小樊
33
2025-11-20 09:04:25
栏目: 智能运维

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 对比

0
看了该问题的人还看了