Déploiement
Déploiement • Chapitre 6 : Déploiement d'une API REST

Préparation d'une API pour la production

Transformez votre API de développement en service de production robuste : masquage des traces de pile (stack traces), sécurisation des en-têtes HTTP avec Helmet, compression Gzip et limitation des requêtes (rate limiting).

🛡️
Module Helmet

Verrouille automatiquement 11 en-têtes HTTP contre le détournement de clic, XSS et sniffing.

🗜️
Compression Gzip

Divise par 4 la taille des charges utiles JSON envoyées aux applications mobiles et web.

🛑
Gestionnaire d'Erreurs

Empêche l'affichage des détails internes du code et des requêtes SQL aux attaquants.

⏱️
Rate Limiting

Protège votre base de données contre les dénis de service et les attaques par force brute.

express-production-hardening.ts
import express, { Request, Response, NextFunction } from 'express';
import helmet from 'helmet';
import compression from 'compression';
import rateLimit from 'express-rate-limit';

const app = express();

// 1. Sécurité des en-têtes HTTP
app.use(helmet());

// 2. Compression des réponses JSON
app.use(compression());

// 3. Limitation du débit (Rate limiting)
const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 100, // Max 100 requêtes par IP
  standardHeaders: true,
  legacyHeaders: false,
});
app.use('/api/', limiter);

// 4. Gestionnaire d'erreurs global (Masque les stack traces en production)
app.use((err: any, req: Request, res: Response, next: NextFunction) => {
  const status = err.status || 500;
  res.status(status).json({
    success: false,
    message: process.env.NODE_ENV === 'production' 
      ? 'Une anomalie interne est survenue.' 
      : err.message
  });
});

Guide Approfondi & Architecture Système

1. Pourquoi une API 'de dev' s'effondre en production

En local, lorsqu'une erreur survient, afficher une page avec la ligne exacte du fichier TypeScript est pratique. Mais en production :
Risque de sécurité majeur : Renvoyer une Stack Trace complète à un utilisateur lambda révèle votre version de Node, vos chemins de disques (/home/debian/mon-api/src/...) et le nom de vos tables de base de données. Ces informations fournissent une carte routière aux pirates informatiques.

2. La Règle d'Or : Helmet et Compression

La simple addition de deux lignes de middleware transforme le profil de sécurité et de performance de votre serveur :
  • Helmet : Retire l'en-tête X-Powered-By: Express (qui dit au monde entier quelle techno vous utilisez) et active X-Content-Type-Options: nosniff.
  • Compression : Si votre endpoint renvoie une liste de 500 produits (environ 400 Ko de JSON), l'algorithme gzip réduit le transfert à 35 Ko sans aucune perte de données. Vos utilisateurs mobiles constatent un chargement 10 fois plus rapide !

Checklist de Transition : Mode Développement vs Mode Production API

FonctionnalitéComportement en DéveloppementConfiguration Obligatoire en Production
Variable NODE_ENVNon définie ou 'development'Strictement 'production' (active les caches internes)
Affichage des erreursStack trace complète et message brutMessage générique sécurisé + log serveur privé
En-têtes HTTPX-Powered-By: Express visibleHelmet activé avec protection anti-sniffing
Gestion du débitIllimitéLimiteur (ex: 100 requêtes / 15 min par IP)
Journalisation (Logs)Affichage console verbeuxLogs structurés (Winston / Pino) vers fichiers tournants