OpenAPI4 min read

Boshqa imkoniyatlar

Bu sahifada foydali bo'lishi mumkin bo'lgan boshqa imkoniyatlar keltirilgan.

Bu sahifada foydali bo'lishi mumkin bo'lgan boshqa imkoniyatlar keltirilgan.

Global prefiks

setGlobalPrefix() orqali yo'llar uchun o'rnatilgan global prefiksni inkor qilish uchun ignoreGlobalPrefix dan foydalaning:

TypeScript
1const document = SwaggerModule.createDocument(app, options, {
2  ignoreGlobalPrefix: true,
3});

Global parametrlari

Quyida ko'rsatilganidek DocumentBuilder yordamida barcha yo'llar uchun parametrlarni belgilashingiz mumkin:

TypeScript
1const config = new DocumentBuilder()
2  .addGlobalParameters({
3    name: 'tenantId',
4    in: 'header',
5  })
6  // other configurations
7  .build();

Global javoblar

DocumentBuilder yordamida barcha yo'llar uchun global javoblarni belgilashingiz mumkin. Bu ilovangizdagi barcha endpointlar bo'yicha bir xil javoblarni (masalan, 401 Unauthorized yoki 500 Internal Server Error kabi xato kodlarini) sozlashda foydali.

TypeScript
1const config = new DocumentBuilder()
2  .addGlobalResponse({
3    status: 500,
4    description: 'Internal server error',
5  })
6  // other configurations
7  .build();

Bir nechta spetsifikatsiyalar

SwaggerModule bir nechta spetsifikatsiyalarni qo'llab-quvvatlash usulini taqdim etadi. Boshqacha aytganda, turli endpointlarda turli UI lar bilan turli hujjatlarni taqdim etishingiz mumkin.

Bir nechta spetsifikatsiyani qo'llab-quvvatlash uchun ilovangiz modular yondashuvda yozilishi kerak. createDocument() metodi uchinchi argument sifatida extraOptions ni qabul qiladi, unda include nomli xususiyat mavjud obyekt bo'ladi. include xususiyati modul massivini qabul qiladi.

Bir nechta spetsifikatsiyalarni quyidagicha sozlashingiz mumkin:

TypeScript
1import { NestFactory } from '@nestjs/core';
2import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
3import { AppModule } from './app.module';
4import { CatsModule } from './cats/cats.module';
5import { DogsModule } from './dogs/dogs.module';
6
7async function bootstrap() {
8  const app = await NestFactory.create(AppModule);
9
10  /**
11   * createDocument(application, configurationOptions, extraOptions);
12   *
13   * createDocument method takes an optional 3rd argument "extraOptions"
14   * which is an object with "include" property where you can pass an Array
15   * of Modules that you want to include in that Swagger Specification
16   * E.g: CatsModule and DogsModule will have two separate Swagger Specifications which
17   * will be exposed on two different SwaggerUI with two different endpoints.
18   */
19
20  const options = new DocumentBuilder()
21    .setTitle('Cats example')
22    .setDescription('The cats API description')
23    .setVersion('1.0')
24    .addTag('cats')
25    .build();
26
27  const catDocumentFactory = () =>
28    SwaggerModule.createDocument(app, options, {
29      include: [CatsModule],
30    });
31  SwaggerModule.setup('api/cats', app, catDocumentFactory);
32
33  const secondOptions = new DocumentBuilder()
34    .setTitle('Dogs example')
35    .setDescription('The dogs API description')
36    .setVersion('1.0')
37    .addTag('dogs')
38    .build();
39
40  const dogDocumentFactory = () =>
41    SwaggerModule.createDocument(app, secondOptions, {
42      include: [DogsModule],
43    });
44  SwaggerModule.setup('api/dogs', app, dogDocumentFactory);
45
46  await app.listen(process.env.PORT ?? 3000);
47}
48bootstrap();

Endi serveringizni quyidagi buyruq bilan ishga tushirishingiz mumkin:

Terminal
1$ npm run start

http://localhost:3000/api/cats manziliga o'tib, mushuklar uchun Swagger UI ni ko'ring:

Xuddi shunday, http://localhost:3000/api/dogs itlar uchun Swagger UI ni ko'rsatadi:

Explorer panelidagi dropdown

Explorer paneli dropdown menyusida bir nechta spetsifikatsiyalarni qo'llab-quvvatlash uchun explorer: true ni o'rnating va SwaggerCustomOptions ichida swaggerOptions.urls ni sozlang.

Hint

swaggerOptions.urls Swagger hujjatlaringizning JSON formatiga ishora qilayotganiga ishonch hosil qiling! JSON hujjatini ko'rsatish uchun SwaggerCustomOptions ichida jsonDocumentUrl dan foydalaning. Qo'shimcha sozlash variantlari uchun bu yerga qarang.

Explorer paneli dropdownidan bir nechta spetsifikatsiyalarni quyidagicha sozlash mumkin:

TypeScript
1import { NestFactory } from '@nestjs/core';
2import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
3import { AppModule } from './app.module';
4import { CatsModule } from './cats/cats.module';
5import { DogsModule } from './dogs/dogs.module';
6
7async function bootstrap() {
8  const app = await NestFactory.create(AppModule);
9
10  // Main API options
11  const options = new DocumentBuilder()
12    .setTitle('Multiple Specifications Example')
13    .setDescription('Description for multiple specifications')
14    .setVersion('1.0')
15    .build();
16
17  // Create main API document
18  const document = SwaggerModule.createDocument(app, options);
19
20  // Setup main API Swagger UI with dropdown support
21  SwaggerModule.setup('api', app, document, {
22    explorer: true,
23    swaggerOptions: {
24      urls: [
25        {
26          name: '1. API',
27          url: 'api/swagger.json',
28        },
29        {
30          name: '2. Cats API',
31          url: 'api/cats/swagger.json',
32        },
33        {
34          name: '3. Dogs API',
35          url: 'api/dogs/swagger.json',
36        },
37      ],
38    },
39    jsonDocumentUrl: '/api/swagger.json',
40  });
41
42  // Cats API options
43  const catOptions = new DocumentBuilder()
44    .setTitle('Cats Example')
45    .setDescription('Description for the Cats API')
46    .setVersion('1.0')
47    .addTag('cats')
48    .build();
49
50  // Create Cats API document
51  const catDocument = SwaggerModule.createDocument(app, catOptions, {
52    include: [CatsModule],
53  });
54
55  // Setup Cats API Swagger UI
56  SwaggerModule.setup('api/cats', app, catDocument, {
57    jsonDocumentUrl: '/api/cats/swagger.json',
58  });
59
60  // Dogs API options
61  const dogOptions = new DocumentBuilder()
62    .setTitle('Dogs Example')
63    .setDescription('Description for the Dogs API')
64    .setVersion('1.0')
65    .addTag('dogs')
66    .build();
67
68  // Create Dogs API document
69  const dogDocument = SwaggerModule.createDocument(app, dogOptions, {
70    include: [DogsModule],
71  });
72
73  // Setup Dogs API Swagger UI
74  SwaggerModule.setup('api/dogs', app, dogDocument, {
75    jsonDocumentUrl: '/api/dogs/swagger.json',
76  });
77
78  await app.listen(3000);
79}
80
81bootstrap();

Bu misolda asosiy API hamda mushuklar va itlar uchun alohida spetsifikatsiyalarni sozladik, ularning har biri explorer panelidagi dropdown orqali ochiladi.