====== 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.