使用 swagger 4.x 包生成 swagger 2.0 yaml

Posted

技术标签:

【中文标题】使用 swagger 4.x 包生成 swagger 2.0 yaml【英文标题】:Generate swagger 2.0 yaml using swagger 4.x package 【发布时间】:2020-10-09 03:22:39 【问题描述】:

我要将我的 API 服务器集成到 Google Cloud Endpoints。

Google Cloud Endpoints 目前支持 swagger 2.0。

但是我的依赖项/库现在已经升级了。所以我想在不降级 swagger 库版本的情况下生成 swagger 2.0 yaml 文件(api 端点已经用 swagger 4.x - openapi 3.0 规范描述)。

Nestjs 和 swagger 依赖项(package.json):

...

"@nestjs/common": "^7.0.0",
"@nestjs/config": "^0.4.0",
"@nestjs/core": "^7.0.0",
"@nestjs/platform-express": "^7.0.0",
"js-yaml": "^3.14.0",

...

"@nestjs/swagger": "^4.5.4",
"swagger-ui-express": "^4.1.4",

...

和大摇大摆的生成器脚本:

import  NestFactory  from '@nestjs/core';
import  AppModule  from './app.module';
import * as fs from 'fs'
import * as yaml from 'js-yaml'

const generateSwaggerYaml = async () => 
  const app = await NestFactory.create(AppModule);
  const options = new DocumentBuilder()
    .setTitle('API Title')
    .setDescription('API Description')
    .build()

  const document = SwaggerModule.createDocument(app, options)

  fs.writeFileSync("./openapi-run.yaml", yaml.safeDump(document))



generateSwaggerYaml()

脚本的输出是 openapi 3.0 spec :(

openapi: 3.0.0
info:
  title: API Title
  description: API Description.
  version: 1.0.0
  contact: 
tags: []
servers: []

...

是否有任何选项/方法可以从 openapi 3.0 文档生成 swagger2.0 yaml?

如何将 openapi 3.0 规范降级为 swagger 2.0 规范?

【问题讨论】:

【参考方案1】:

我使用 github 上的这个项目就是为了这个目的:https://github.com/LucyBot-Inc/api-spec-converter

openapi 3 yaml to swagger 2 yaml,就这么简单$ api-spec-converter --from openapi_3 --syntax yaml --to swagger_2 $f > $SWAGGER_V2_FILE

【讨论】:

以上是关于使用 swagger 4.x 包生成 swagger 2.0 yaml的主要内容,如果未能解决你的问题,请参考以下文章

如何生成离线 Swagger API 文档?

swagger介绍和使用

Swagger的学习

配置Jersey 1.x项目以生成swagger文档

SpringBoot整合swagger

Swagger教程三