Table des matières
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.