我们有很多用nodejs编写的API,使用的是nestjs框架。我们可以使用nestjs的SwaggerModule生成openapi.yaml。这很好用。但问题是它需要API启动,因此数据库也要启动并运行。这是我们CI/CD中的一个问题,因为我们需要在运行API之前生成openapi规范。有没有可能从我们的代码中生成openapi规范,而不需要运行应用程序?或者有没有一种简单的方法来模拟我们的数据库?谢谢你的帮助
oknwwptz1#
简短的回答是不,there isn't a way to generate the docs,不运行NestJS应用程序。但是,您可以生成一个表示OpenAPI文档的JSON文件,然后从那里生成一个静态网站。这个问题让您完成了一半:
async function bootstrap() { const app = await NestFactory.create(AppModule); const options = new DocumentBuilder() .setTitle('Cats example') .setDescription('The cats API description') .setVersion('1.0') .addTag('cats') .build(); const document = SwaggerModule.createDocument(app, options); const outputPath = path.resolve(process.cwd(), 'swagger.json'); writeFileSync(outputPath, JSON.stringify(document), { encoding: 'utf8'}); await app.close(); } bootstrap();
这将生成一个包含OpenAPI规范的文件swagger.json。从那里,你可以使用一个tool like Spectacle来生成实际的HTML:
swagger.json
npx spectacle-docs -t public/docs swagger.json
一个更少文档记录的特性是仅使用curl从常规端点检索OpenAPI规范的JSON表示的能力。假设您有一个标准的@nestjs/swagger集成,它将OpenAPI文档发布到/docs/:
/docs/
const options = new DocumentBuilder() .setTitle('core-api') .setDescription('The core API description') .setVersion('3.0') .addTag('core-api') .setBasePath(version) .build(); const document = SwaggerModule.createDocument(app, options); SwaggerModule.setup('docs', app, document);
如果你浏览到http:/localhost:3000/docs/,你可以访问文档的HTML版本。但是,如果你浏览到http://localhost:3000/docs-json,你会收到一个JSON表示。只要把-json附加到你指定的路径上就可以了。把这些联系在一起,你就可以把它们集成到一个CI管道中。我已经把它们集成到一个Gitlab CI管道中,如下所示:
http:/localhost:3000/docs/
http://localhost:3000/docs-json
-json
script: - until nc -vz $API_IP 3000; do sleep 1; done - curl http://$API_IP:3000/docs-json -o swagger.json - npx spectacle-docs -t public/docs swagger.json
在CI管道中,您仍然需要运行NestJS应用程序以及Mongo和启动它所需的任何其他相关服务,但是一旦生成JSON,您就可以停止应用程序,构建静态HTML站点并将其发布到其他地方。
ymdaylpp2#
我设法在不启动服务器的情况下从我的e2e测试中生成了swagger规范在不运行nest js服务器的情况下生成swagger json文件
2条答案
按热度按时间oknwwptz1#
简短的回答是不,there isn't a way to generate the docs,不运行NestJS应用程序。但是,您可以生成一个表示OpenAPI文档的JSON文件,然后从那里生成一个静态网站。这个问题让您完成了一半:
这将生成一个包含OpenAPI规范的文件
swagger.json
。从那里,你可以使用一个tool like Spectacle来生成实际的HTML:一个更少文档记录的特性是仅使用curl从常规端点检索OpenAPI规范的JSON表示的能力。
假设您有一个标准的@nestjs/swagger集成,它将OpenAPI文档发布到
/docs/
:如果你浏览到
http:/localhost:3000/docs/
,你可以访问文档的HTML版本。但是,如果你浏览到http://localhost:3000/docs-json
,你会收到一个JSON表示。只要把-json
附加到你指定的路径上就可以了。把这些联系在一起,你就可以把它们集成到一个CI管道中。我已经把它们集成到一个Gitlab CI管道中,如下所示:
在CI管道中,您仍然需要运行NestJS应用程序以及Mongo和启动它所需的任何其他相关服务,但是一旦生成JSON,您就可以停止应用程序,构建静态HTML站点并将其发布到其他地方。
ymdaylpp2#
我设法在不启动服务器的情况下从我的e2e测试中生成了swagger规范
在不运行nest js服务器的情况下生成swagger json文件