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

Fondamental · 9 min de lecture

HTTP sans mystère

Ce qui circule réellement entre un client et un serveur

1Définition

HTTP est un protocole de questions-réponses. Une requête porte une méthode, un chemin, des en-têtes et parfois un corps ; une réponse porte un code de statut, des en-têtes et un corps. Le serveur ne se souvient de rien entre deux requêtes : chacune doit contenir tout ce qu'il faut pour y répondre.

2Principes fondamentaux

01

Les méthodes ont un sens

GET lit sans modifier, POST crée, PATCH modifie une partie, PUT remplace, DELETE supprime. Les caches et les robots s'y fient.

02

Le statut d'abord

2xx réussite, 4xx faute du client, 5xx faute du serveur. Un client décide quoi faire en lisant ce seul nombre.

03

Sans état

Chaque requête est indépendante : l'identité voyage dans chaque requête (un jeton), pas dans la mémoire du serveur.

04

Le standard Request / Response

Node, Next.js, Deno, Bun et Cloudflare partagent les mêmes objets Request et Response, issus du navigateur.

3Exemples pratiques

Une requête et sa réponse, en clair

Exemple
1GET /joueurs/3 HTTP/1.12Host: api.sys-code.app3Authorization: Bearer jeton-codey4 5HTTP/1.1 200 OK6Content-Type: application/json7 8{"id":3,"pseudo":"bo"}

Tout HTTP tient dans cette forme : une ligne de requête, des en-têtes, une ligne vide, un corps. Les outils du navigateur (onglet Réseau) la montrent pour chaque appel.

Une route au standard du web

Exemple
1async function handler(request) {2  const url = new URL(request.url);3  if (request.method === "GET" && url.pathname === "/ping") {4    return new Response("pong");5  }6  return new Response("Introuvable", { status: 404 });7}

Une fonction, une requête en entrée, une réponse en sortie : tout le reste d'un serveur est construit sur cette forme.

4Erreurs courantes

Tout en 200

À éviter

return Response.json({ ok: false, erreur: "Introuvable" });

À faire

return Response.json({ erreur: "Introuvable" }, { status: 404 });

Pourquoi : Les clients, les caches et la surveillance lisent le statut. Un 200 qui cache une erreur les trompe tous.

GET qui modifie

À éviter

GET /joueurs/3/supprimer

À faire

DELETE /joueurs/3

Pourquoi : Un robot d'indexation ou un préchargement de lien déclencherait la suppression.

Comparer l'URL entière

À éviter

if (request.url === "/ping")

À faire

if (new URL(request.url).pathname === "/ping")

Pourquoi : request.url contient le domaine et les paramètres : la comparaison échoue toujours.

5Subtilités à connaître

  • ◆HEAD et OPTIONS existent aussi : HEAD renvoie les en-têtes sans le corps, OPTIONS sert au navigateur pour vérifier les règles CORS.
  • ◆HTTP/2 et HTTP/3 changent le transport, pas le modèle : méthodes, statuts et en-têtes restent les mêmes.
  • ◆Les noms d'en-têtes ne sont pas sensibles à la casse : Authorization et authorization désignent le même en-tête.

6Vérifie ta compréhension

Question 1/3

Score 0

Un 4xx signifie…

Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.