← Web Dev
🖥️

Backend : Node.js, Express & API REST

Intermédiaire
🧠Comprendre en lisant n'est pas savoir écrire.🧠Un module est fini quand tu peux le reproduire fenêtre fermée.🧠Écris le problème en français avant d'écrire du code.🧠Une question impossible cache trois questions faciles.🧠Retape le code à la main. Puis referme et réécris-le.🧠Essaie d'abord, cherche ensuite.🧠Cherche « comment on écrit ça », jamais « qu'est-ce que je dois faire ».🧠Pour comprendre du code, casse-le.⌨️Une fonction qui plante sur un cas limite n'est pas finie.⌨️Si un bloc a un nom clair, il mérite d'être une fonction.⌨️Savoir lire une erreur vaut plus que connaître dix méthodes.⌨️Diagnostiquer, c'est éliminer dans l'ordre — pas essayer au hasard.⌨️Une optimisation sans mesure avant/après est une croyance.🔍Regarde le fichier avant de le charger.🔍Une performance anormalement bonne est une hypothèse à réfuter.🔍Cette valeur existe-t-elle à l'instant où je dois prédire ?🔍fit sur le train, transform partout.🔍Un chiffre qu'on ne sait pas raconter est un chiffre qu'on n'a pas compris.🔍Un graphique sans question n'a rien à dire.🤖Un score d'entraînement parfait n'est jamais une bonne nouvelle.🤖Le jeu de test ne se regarde qu'une fois.🤖Plus tu essaies de configurations, plus ton meilleur score est optimiste.🤖Un seuil de décision est un arbitrage économique, pas un réglage technique.🤖Commence toujours par une baseline. Note son score.🤖Le meilleur modèle n'est pas le plus précis, c'est celui qu'on peut maintenir.🚀Un modèle en production n'est pas un livrable, c'est un système vivant.🚀Un secret publié est un secret compromis.🚀Pour chaque permission : que se passe-t-il si cette machine est compromise ?🚀Un post-mortem qui cherche un coupable ne produit aucune amélioration.🚀« Nous n'utilisons pas cette variable » n'est pas une garantie d'équité.🚀Rends l'arbitrage explicite et chiffré. Ne le tranche pas en silence.🚀Un résultat qu'on ne sait pas reproduire est une anecdote.

🎯 Objectifs d'apprentissage

À l'issue de ce module, tu seras capable de :

  • 01Concevoir une API REST cohérente et versionnée
  • 02Valider toute entrée utilisateur avant traitement
  • 03Implémenter une authentification par jeton et une autorisation par rôle
  • 04Protéger une API contre les abus (rate limiting, CORS, en-têtes)
  • 05Tester une API par des tests d'intégration automatisés

Prérequis

Module Bases de données pour le Web — l'API s'appuie sur le schéma que tu y as conçu.

Node.js & npm : le runtime JavaScript serveur

50 min

Node.js exécute JavaScript hors du navigateur. npm (Node Package Manager) donne accès à 2 millions de packages.

Modules Node.js intégrés

const fs = require("fs");
const path = require("path");
const http = require("http");

// Lire un fichier
const data = fs.readFileSync("data.json", "utf8");
const parsed = JSON.parse(data);

// Écrire un fichier
fs.writeFileSync("output.json", JSON.stringify(result, null, 2));

// Chemin portable (Windows/Mac/Linux)
const filePath = path.join(__dirname, "data", "train.csv");

npm — gestion des dépendances

npm init -y                    # créer package.json
npm install express            # installer
npm install --save-dev jest    # dépendance de dev
npm run start                  # exécuter le script "start"
npm test                       # exécuter les tests

Package.json — le cœur du projet Node

{
  "name": "ml-api",
  "version": "1.0.0",
  "scripts": {
    "start": "node src/index.js",
    "dev": "nodemon src/index.js",
    "test": "jest"
  },
  "dependencies": {
    "express": "^4.18.0"
  }
}

Asynchrone en Node.js — tout est événementiel :

// Éviter les callbacks imbriqués (callback hell)
// ✅ Utiliser async/await
const readData = async (filePath) => {
  const content = await fs.promises.readFile(filePath, "utf8");
  return JSON.parse(content);
};

✍️ Exercices de la leçon

2 exercices

Fais-les dans l'ordre, dans un vrai fichier .py — pas dans ta tête. Ne déplie la correction qu'après avoir écrit quelque chose, même faux.

🔧

Exercice AUn script Node qui traite des fichiers

Application directe · Tu appliques ce que tu viens de lire.

Écris un script traiter.js qui :

  1. 1.lit un dossier data/ et liste tous les fichiers .json
  2. 2.pour chacun, charge le contenu et extrait deux champs de ton choix
  3. 3.écrit un resultats.json agrégé, formaté lisiblement
  4. 4.affiche un résumé : nombre de fichiers traités, nombre en erreur
  5. 5.ne s'interrompt pas si un fichier est corrompu — il le signale et continue

Ajoute les scripts npm start et dev dans le package.json, et utilise path.join pour que ça fonctionne sur Windows comme sur Linux.

🎯

Exercice BLe serveur qui se fige

Page blanche · Aucun squelette : à toi de choisir la méthode.

Page blanche. Diagnostic.

Ce serveur répond normalement, sauf quand quelqu'un appelle /rapport : pendant 8 secondes, il ne répond plus à aucune requête — même pas à /sante, qui ne fait rien.

import express from "express";
import { readFileSync } from "node:fs";

const app = express();

app.get("/sante", (req, res) => res.json({ ok: true }));

app.get("/rapport", (req, res) => {
  const brut = readFileSync("gros-fichier.json", "utf8");   // 400 Mo
  const donnees = JSON.parse(brut);
  const total = donnees.reduce((s, d) => s + d.montant, 0);
  res.json({ total, lignes: donnees.length });
});

app.listen(3000);
  1. 1.explique pourquoi /sante cesse de répondre alors qu'elle ne fait rien
  2. 2.identifie les deux opérations bloquantes de /rapport
  3. 3.corrige la première
  4. 4.la seconde ne se corrige pas de la même façon — explique pourquoi, et donne deux stratégies
  5. 5.écris le test qui prouve la correction

Le point 4 est le cœur. Passer en asynchrone ne résout pas tout.

🤖

Question sur cette leçon ? Clique sur 💬 Demander au tuteur en bas à droite.