Back to articles

BackendNode.js
Les bases d'une API performante avec Node.js
5 Avril 2025
6 min de lecture

Créer une API performante avec Node.js est essentiel pour développer des applications web modernes et scalables. Dans cet article, nous allons explorer les meilleures pratiques et techniques d'optimisation pour construire une API robuste avec Express.js.
Configuration de base avec Express
Commençons par une configuration de base d'une API avec Express :
const express = require('express');
const app = express();
app.use(express.json());
app.get('/api/status', (req, res) => {
res.json({ status: 'ok', timestamp: new Date() });
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
Optimisation des performances
Voici quelques techniques clés pour optimiser votre API :
- Utilisation de la compression pour réduire la taille des réponses
- Mise en cache des données fréquemment utilisées
- Gestion efficace des erreurs
- Limitation du débit (rate limiting)
Exemple avec compression et rate limiting
const express = require('express');
const compression = require('compression');
const rateLimit = require('express-rate-limit');
const app = express();
// Compression des réponses
app.use(compression());
// Limitation à 100 requêtes par IP par 15 minutes
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100
});
app.use(limiter);
// Middleware de logging
app.use((req, res, next) => {
console.log(`${req.method} ${req.path}`);
next();
});
// Route avec cache simple
const cache = {};
app.get('/api/data/:id', (req, res) => {
const id = req.params.id;
if (cache[id]) {
return res.json(cache[id]);
}
const data = { id, value: Math.random() };
cache[id] = data;
res.json(data);
});
app.listen(3000);
Gestion des erreurs
Une bonne gestion des erreurs est cruciale pour la fiabilité :
// Middleware d'erreur global
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({
error: 'Une erreur est survenue',
code: 'INTERNAL_SERVER_ERROR'
});
});
// Exemple de route avec validation
app.post('/api/users', (req, res, next) => {
const { name, email } = req.body;
if (!name || !email) {
const error = new Error('Name et email sont requis');
error.status = 400;
return next(error);
}
res.status(201).json({ id: 1, name, email });
});
punchnox
Développeur fullstack passionné par l'innovation technologique