Kodokon kodokon.com

Construire une API REST

Concevez une API REST propre avec les bonnes méthodes HTTP, les bons codes de statut et une validation du corps des requêtes.

9 min · 3 questions

Ouvrir cette leçon dans Kodokon

Une API REST expose des ressources (utilisateurs, tâches, commandes) manipulées avec les méthodes HTTP : GET pour lire, POST pour créer, PUT ou PATCH pour modifier, DELETE pour supprimer. La convention professionnelle : des noms au pluriel, jamais de verbes dans les URL. On écrit POST /tasks, pas /createTask. Construisons une petite API de tâches, en mémoire pour l'instant.

JAVASCRIPT
import express from "express";

const app = express();
app.use(express.json());

const tasks = [
  { id: 1, title: "Relire le module", done: false }
];

app.get("/tasks", (req, res) => {
  res.json(tasks);
});

app.listen(3000);

La ligne app.use(express.json()) est indispensable : sans elle, req.body vaut undefined pour toute requête JSON. À la création, validez systématiquement l'entrée, répondez 201 et renvoyez la ressource créée : le client récupère ainsi l'id généré par le serveur.

JAVASCRIPT
app.post("/tasks", (req, res) => {
  const { title } = req.body;
  if (!title) {
    return res.status(400).json({
      error: "Le champ title est requis"
    });
  }
  const task = {
    id: tasks.length + 1,
    title,
    done: false
  };
  tasks.push(task);
  res.status(201).json(task);
});

Retenez les codes que vous utiliserez tous les jours : 200 lecture ou mise à jour réussie, 201 ressource créée, 204 succès sans contenu (suppression), 400 requête invalide, 404 ressource introuvable, 500 erreur du serveur. La règle : en 4xx, le client s'est trompé ; en 5xx, c'est votre code qui a échoué.

JAVASCRIPT
app.delete("/tasks/:id", (req, res) => {
  const id = Number(req.params.id);
  const index = tasks.findIndex((t) => t.id === id);
  if (index === -1) {
    return res.status(404).json({
      error: "Tâche introuvable"
    });
  }
  tasks.splice(index, 1);
  res.status(204).end();
});

Quiz de validation

Vérifiez que vous avez bien retenu les points clés de cette leçon.

  1. Quel code de statut renvoyez-vous après la création réussie d'une ressource ?
    • 200
    • 201
    • 204
    • 301
  2. Sans quelle ligne req.body reste-t-il undefined pour une requête JSON ?
    • app.use(express.json())
    • app.use(express.static(...))
    • app.listen(3000)
  3. Un client envoie un POST sans le champ obligatoire title. Quelle est la bonne réaction de l'API ?
    • Créer la ressource avec un titre vide
    • Renvoyer un statut 400 avec un message d'erreur
    • Renvoyer un statut 500
    • Ignorer la requête sans répondre