NodeJS 如何更新NestJS Swagger模块,但使用OpenAPI 2.0(Swagger)?

0qx6xfy6  于 2023-08-04  发布在  Node.js
关注(0)|答案(2)|浏览(135)

我们正在使用NestJS框架在Node.js/Typescript中制作一个API。我们使用@nestjs/swagger包使其符合OpenAPI(以前称为Swagger)。它旨在与Azure/autorest一起使用以生成客户端代码。
Autorest支持OpenAPI 2.0,而不是3.0。@nestjs/swagger 3.*.*实现了OpenAPI 2.0。当我们将@nestjs/swagger更新为4.*.*时,它将变成OpenAPI 3.0。这不符合我们的需要,因为我们不能再使用Autorest。另一方面,不更新包意味着我们可能会错过安全更新,甚至无法更新整个NestJS框架。
有没有办法更新@nestjs/swagger并保持OpenAPI 2.0?

8ulbf1ek

8ulbf1ek1#

很不幸没有在内部,@nestjs/swagger v4专门生成OpenAPI 3.0 specification。在您等待autorest 3正式发布时,现在有两种选择。

  • 继续使用@nestjs/swagger v3。至于update the entire NestJS framework,您不必担心这一点,因为@nestjs/swagger是一个非常独立的软件包。关于依赖关系的安全问题,我可以看到你的担忧是有道理的。
  • 尝试autorest 3.beta,看看它是否足够稳定。
hec6srdp

hec6srdp2#

也许你可以用图书馆
api-spec-converter enter link description here

const apiConverter = require('api-spec-converter');
const yaml = require('yaml');
const fs = require('fs');

apiConverter.convert(
  {
    sintax: 'yaml',
    order: 'openapi',
    from: 'openapi_3',
    to: 'swagger_2',
    source: './swagger-v3.json',
  },
  function(err, converted) {
    if (err) {
      console.log(err);
      console.log('Error converting file');
      return;
    }
    const yamlString = yaml.stringify(converted.spec);
    fs.writeFileSync('./swagger-v2.yaml', yamlString);

    console.log('Done!');
  },
);

字符串
package.json中添加调用脚本:

“convert:swagger”:“node ./swagger-converter.js”

请注意,源路径是由NestJS生成的路径。
另外一点是,我在.yaml中生成输出,但您可以在.json中生成它,只需删除语法选项并使用**converter.stringify()**option

相关问题