Outils pour utilisateurs

Outils du site


ujusum:3-codage:1-repository:1-pas-a-pas:1-swagger-details

Détail complet de l'installation Swagger dans NestJS

Objectif

À la fin de cette étape, les développeurs doivent pouvoir accéder à :

http://localhost:3000/swagger

et visualiser automatiquement :

  • Les endpoints REST
  • Les DTO
  • Les schémas JSON
  • Les réponses HTTP
  • Les erreurs
  • L'authentification JWT

Swagger deviendra la documentation vivante de l'API.


Étape 1 — Installer les dépendances

Depuis la racine du projet :

cd apps/api

Installer les packages :

npm install @nestjs/swagger swagger-ui-express

Vérifier :

npm list @nestjs/swagger
 
npm list swagger-ui-express

Étape 2 — Vérifier la version NestJS

Swagger doit être compatible avec la version de NestJS utilisée.

Vérification :

npm list @nestjs/core

Exemple :

@nestjs/core@11.x

La version Swagger doit être cohérente :

@nestjs/swagger@11.x

Étape 3 — Modifier main.ts

Fichier :

apps/api/src/main.ts

Version minimale :

import { NestFactory } from '@nestjs/core';
 
import { AppModule } from './app.module';
 
import {
  SwaggerModule,
  DocumentBuilder,
} from '@nestjs/swagger';
 
async function bootstrap() {
 
  const app =
    await NestFactory.create(AppModule);
 
  const config =
    new DocumentBuilder()
 
      .setTitle('Rental Platform API')
 
      .setDescription(
        'Documentation API'
      )
 
      .setVersion('1.0.0')
 
      .build();
 
  const document =
    SwaggerModule.createDocument(
      app,
      config,
    );
 
  SwaggerModule.setup(
    'swagger',
    app,
    document,
  );
 
  await app.listen(3000);
}
 
bootstrap();

Étape 4 — Lancer l'API

npm run start:dev

Étape 5 — Vérifier Swagger

Ouvrir :

http://localhost:3000/swagger

Vous devez voir :

Rental Platform API

Version 1.0.0

À ce stade :

0 endpoint

est normal.


Étape 6 — Créer un premier contrôleur

Créer :

src/modules/health

health.controller.ts

import {
  Controller,
  Get,
} from '@nestjs/common';
 
@Controller('health')
export class HealthController {
 
  @Get()
  health() {
 
    return {
      status: 'UP',
    };
  }
}

health.module.ts

import { Module } from '@nestjs/common';
 
import { HealthController }
from './health.controller';
 
@Module({
 
  controllers: [
    HealthController,
  ],
})
export class HealthModule {}

app.module.ts

import { Module } from '@nestjs/common';
 
import { HealthModule }
from './modules/health/health.module';
 
@Module({
 
  imports: [
    HealthModule,
  ],
})
export class AppModule {}

Étape 7 — Vérifier l'apparition dans Swagger

Recharger :

http://localhost:3000/swagger

Vous devez voir :

GET /health

Étape 8 — Documenter les endpoints

Installer les décorateurs

Déjà inclus dans :

@nestjs/swagger

Exemple

import {
  ApiTags,
  ApiOperation,
  ApiResponse,
} from '@nestjs/swagger';
 
@ApiTags('Health')
 
@Controller('health')
 
export class HealthController {
 
  @Get()
 
  @ApiOperation({
    summary:
      'Health Check',
  })
 
  @ApiResponse({
    status: 200,
    description:
      'Application available',
  })
 
  health() {
 
    return {
      status: 'UP',
    };
  }
}

Étape 9 — Ajouter des DTO

health-response.dto.ts

import { ApiProperty }
from '@nestjs/swagger';
 
export class HealthResponseDto {
 
  @ApiProperty({
    example: 'UP',
  })
  status: string;
}

Utilisation

@ApiOkResponse({
  type: HealthResponseDto,
})

Résultat Swagger

Swagger affiche :

{
  "status": "UP"
}

avec son schéma JSON.


Étape 10 — Activer les DTO automatiquement

Dans :

nest-cli.json

Ajouter :

{
  "compilerOptions": {
    "plugins": [
      "@nestjs/swagger/plugin"
    ]
  }
}

Installation complémentaire

npm install -D ts-patch

Puis :

npx ts-patch install

Avantage

Swagger détectera automatiquement :

DTO

Types

Enums

Validators

sans configuration supplémentaire.


Étape 11 — Intégrer la validation

Installer :

npm install class-validator
 
npm install class-transformer

Exemple DTO

import {
  IsEmail,
  IsString,
} from 'class-validator';
 
import {
  ApiProperty,
} from '@nestjs/swagger';
 
export class RegisterDto {
 
  @ApiProperty({
    example:
      'john@acme.com',
  })
  @IsEmail()
  email: string;
 
  @ApiProperty({
    example:
      'Password123!',
  })
  @IsString()
  password: string;
}

Résultat Swagger

Swagger documentera :

email

string

required

et

password

string

required

Étape 12 — Activer ValidationPipe

Dans main.ts :

import {
  ValidationPipe,
} from '@nestjs/common';
 
app.useGlobalPipes(
 
  new ValidationPipe({
 
    whitelist: true,
 
    forbidNonWhitelisted: true,
 
    transform: true,
  }),
);

Étape 13 — Configurer JWT dans Swagger

Ajouter dans main.ts :

const config =
  new DocumentBuilder()
 
    .setTitle(
      'Rental Platform API'
    )
 
    .setVersion('1.0')
 
    .addBearerAuth(
      {
        type: 'http',
        scheme: 'bearer',
        bearerFormat: 'JWT',
      },
      'JWT',
    )
 
    .build();

Sur les endpoints

@ApiBearerAuth('JWT')

Résultat

Bouton :

Authorize

dans Swagger.


Étape 14 — Générer le JSON OpenAPI

Toujours dans main.ts :

import * as fs from 'fs';
 
fs.writeFileSync(
  './openapi.json',
  JSON.stringify(
    document,
    null,
    2,
  ),
);

Résultat

Fichier :

apps/api/openapi.json

Ce fichier servira plus tard à :

SDK TypeScript

Client Frontend

Mock Server

Tests contractuels

Étape 15 — Configuration Enterprise recommandée

Version finale recommandée :

SwaggerModule.setup(
  '/swagger',
  app,
  document,
  {
    swaggerOptions: {
 
      persistAuthorization: true,
 
      docExpansion: 'none',
 
      filter: true,
 
      displayRequestDuration: true,
    },
  },
);

Vérification finale

Lorsque l'installation est terminée :

http://localhost:3000/swagger

doit afficher :

✓ Tags

✓ Endpoints

✓ DTO

✓ Schémas

✓ Validation

✓ JWT

✓ Réponses

✓ OpenAPI 3

✓ Export JSON

✓ Try It Out

✓ Authorize

✓ Temps d'exécution


Livrable obtenu

Vous disposez désormais d'un Swagger Enterprise prêt à documenter les ~500 endpoints prévus par les 20 sprints de la plateforme.

ujusum/3-codage/1-repository/1-pas-a-pas/1-swagger-details.txt · Dernière modification : 2026/06/07 03:02 de 91.170.108.99

DokuWiki Appliance - Powered by TurnKey Linux