Back to articles
BackendNode.js

Les bases d'une API performante avec Node.js

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

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

punchnox

Développeur fullstack passionné par l'innovation technologique

Related articles

Tokenizers dans les LLM : Une Analyse Technique

Tokenizers dans les LLM : Une Analyse Technique