Back-end · 5 mondes · 15 étapes

API avec Node

Construire une API qui répond juste, valide ce qu'elle reçoit et se protège.

Progression

0 %

0/15 étapes terminées

Mode 7

Réviser vite, retenir longtemps

Des fiches express pour relire l'essentiel en deux minutes, des cartes mémoire qui reviennent au bon moment, et un jeu chronométré pour ancrer le vocabulaire.

« Résume les concepts les plus importants dans un guide clair et concis qui m'aide à réviser rapidement et à mémoriser les idées clés sans complexité inutile. »

Codey

Fiches express

L'essentiel, semaine par semaine

Semaine 1

5 points

Requête et réponse

  • Une route : handler(request) renvoie une Response.
  • GET lit, POST crée, PATCH modifie, DELETE supprime.
  • 2xx réussite, 4xx faute du client, 5xx faute du serveur.
  • 404 adresse inconnue, 405 méthode refusée (avec Allow).
  • On compare url.pathname, jamais l'URL entière.
async function handler(request) {  const url = new URL(request.url);  if (request.method === "GET" && url.pathname === "/ping") return new Response("pong");  return new Response("Introuvable", { status: 404 });}

À retenir : Le statut est lu avant le corps.

Semaine 2

5 points

Routes et JSON

  • Response.json(donnees) pose le bon Content-Type.
  • Les erreurs aussi en JSON : { erreur: "…" }.
  • Chemin pour désigner (/joueurs/3), requête pour filtrer (?ville=).
  • searchParams.get renvoie null si absent.
  • Tout ce qui vient de l'adresse est du texte.
const ville = url.searchParams.get("ville");const liste = ville === null ? joueurs : joueurs.filter((j) => j.ville === ville);return Response.json(liste);

À retenir : Une seule forme d'erreur pour toute l'API.

Semaine 3

5 points

Recevoir des données

  • await request.json() dans un try.
  • Valider en tête de route : types, longueurs, bornes.
  • 400 donnée invalide, 409 conflit, 201 créé.
  • Construire l'objet champ par champ.
  • Le serveur valide toujours, même si le formulaire l'a fait.
let donnees;try { donnees = await request.json(); }catch { return Response.json({ erreur: "JSON attendu." }, { status: 400 }); }

À retenir : Tout ce qui arrive est suspect.

Semaine 4

5 points

Une ressource complète

  • Une collection (/quetes) et ses éléments (/quetes/1).
  • 201 création, 200 lecture et modification, 204 suppression.
  • PATCH modifie une partie, PUT remplace tout.
  • Une Map en mémoire joue la base de données.
  • Un routeur : une table « méthode + motif → fonction ».
const routes = {  "GET /quetes": () => Response.json([...quetes.values()]),  "DELETE /quetes/:id": (req, id) => { quetes.delete(id); return new Response(null, { status: 204 }); },};

À retenir : Des noms dans l'adresse, le verbe dans la méthode.

Semaine 5

5 points

Protéger l'API

  • Le jeton voyage dans Authorization: Bearer ….
  • 401 : identité inconnue. 403 : identité connue, accès refusé.
  • Un middleware enveloppe une route et peut répondre à sa place.
  • Les middlewares se composent.
  • 429 quand un client dépasse sa limite.
const avecAuth = (route) => async (request) => {  const qui = utilisateur(request);  if (!qui) return Response.json({ erreur: "Authentification requise." }, { status: 401 });  return route(request, qui);};

À retenir : Une route cachée n'est pas une route protégée.