Développement Web Node.js Express API

Node.js et Express : créer une API REST complète

Apprenez à créer une API REST avec node et Express : routing, middleware, validation, authentification JWT et déploiement. Guide complet.

Benjamin Schweitzer Benjamin Schweitzer
Mercredi 2 avril 2025
4 min de lecture
Node.js et Express : créer une API REST complète

Node.js a transformé le développement backend en permettant d'utiliser JavaScript côté serveur. Associé à Express, le framework le plus populaire de l'écosystème node, vous pouvez créer des APIs REST robustes et performantes rapidement.

Pourquoi choisir Node.js et Express ?

Node utilise un modèle d'I/O non-bloquant et orienté événements, idéal pour les applications avec beaucoup de connexions simultanées. Express ajoute une couche d'abstraction légère avec routing, middleware et gestion des erreurs sans imposer de structure rigide.

L'écosystème npm offre des milliers de packages pour tout besoin : validation, authentification, ORM, upload de fichiers, envoi d'emails, etc. La productivité est excellente une fois les concepts de base maîtrisés.

Installation et premier serveur

mkdir mon-api && cd mon-api
npm init -y
npm install express dotenv

const express = require('express');
const app = express();
app.use(express.json());

app.get('/api/health', (req, res) => {
  res.json({ status: 'ok', timestamp: new Date() });
});

app.listen(3000, () => console.log('Serveur démarré sur le port 3000'));

Ce serveur basique répond aux requêtes GET sur /api/health. Avec express.json(), il parse automatiquement les corps de requêtes JSON.

Organisation en routes et controllers

Pour un projet maintenable, séparez les routes des contrôleurs :

// routes/users.js
const router = require('express').Router();
const UserController = require('../controllers/UserController');

router.get('/', UserController.index);
router.get('/:id', UserController.show);
router.post('/', UserController.create);
router.put('/:id', UserController.update);
router.delete('/:id', UserController.destroy);

module.exports = router;

Chaque contrôleur gère la logique métier, le modèle gère l'accès aux données, la route fait le lien. Cette séparation MVC rend le code testable et évolutif.

Middleware : le cœur d'Express

Les middlewares sont des fonctions qui s'exécutent dans la chaîne de traitement des requêtes. Ils peuvent modifier req et res, appeler next() ou terminer la réponse :

const authMiddleware = (req, res, next) => {
  const token = req.headers.authorization?.split(' ')[1];
  if (!token) return res.status(401).json({ error: 'Non autorisé' });
  try {
    req.user = jwt.verify(token, process.env.JWT_SECRET);
    next();
  } catch {
    res.status(403).json({ error: 'Token invalide' });
  }
};

Ce middleware d'authentification peut être appliqué à des routes spécifiques ou à toute l'application.

Validation des données avec Joi

Ne jamais faire confiance aux données reçues. Joi est une bibliothèque de validation populaire dans l'écosystème node :

const Joi = require('joi');
const userSchema = Joi.object({
  name: Joi.string().min(2).max(50).required(),
  email: Joi.string().email().required(),
  age: Joi.number().integer().min(18)
});

const { error, value } = userSchema.validate(req.body);
if (error) return res.status(400).json({ error: error.details[0].message });

Gestion des erreurs

Créez un middleware de gestion d'erreurs global :

app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(err.statusCode || 500).json({
    error: err.message || 'Erreur serveur'
  });
});

Toute erreur passée à next(err) sera capturée ici, centralisant la gestion d'erreurs.

Connexion à une base de données

Avec Mongoose pour MongoDB ou Sequelize pour SQL, l'intégration est simple. Utilisez un fichier db.js qui exporte la connexion, et importez-le au démarrage de l'application. Pensez aux variables d'environnement pour les identifiants de connexion.

Pour les bonnes pratiques de sécurité et de performance d'une API node en production, consultez la documentation officielle Express.

Conclusion

Node.js avec Express est une combinaison puissante pour créer des APIs REST modernes. La clé est l'organisation : routes séparées, middlewares réutilisables, validation systématique et gestion d'erreurs centralisée. Une fois ces bases maîtrisées, vous pourrez construire des APIs robustes et scalables pour tous types de projets.

Node.js avec Express est un excellent point de départ, mais les projets grandissants bénéficient d'une structure plus stricte. Adoptez NestJS pour les APIs TypeScript d'envergure avec injection de dépendances et architecture claire. Pour les performances, le module cluster et PM2 exploitent tous les cœurs CPU. La sécurité Express demande helmet pour les headers HTTP, express-rate-limit contre les abus, et une validation stricte des entrées avec Zod ou Joi. Les tests avec Jest et Supertest garantissent la fiabilité de chaque endpoint. La documentation Node.js et le dépôt awesome-nodejs référencent les meilleures bibliothèques de l'écosystème pour tous les besoins serveur.

Cet article vous a plu ?

Donnez-lui une note, ça m'aide vraiment !

Partager l'article