Menu
CoddyTech

Créer avec POST

Fait partie de la section API REST du Journey Node.js de Coddy. Leçon 2 sur 25.

Un client qui ajoute une tâche doit savoir où se trouve la nouvelle tâche. Il envoie la nouvelle ressource à l’URL de la liste avec POST, et le serveur répond 201 Created avec la ressource et un en-tête Location indiquant son URL.

POST /api/events   { "name": "Launch party" }

201 Created
Location: /api/events/12
{ "id": 12, "name": "Launch party" }

Le serveur choisit l’id, ce qui garantit que deux clients ne peuvent jamais revendiquer le même. Avec l’en-tête Location, le client peut récupérer le nouvel événement sans construire lui-même l’URL. res.location(path) définit cet en-tête et s’enchaîne comme res.status :

res.status(201).location(`/api/events/${event.id}`).json(event);
challenge icon

Défi

Facile

Les clients ont besoin d’un moyen d’ajouter des tâches. Ajoute une route POST qui crée une tâche et indique au client où se trouve la nouvelle tâche.

  1. Dans routes/tasks.js, ajoute une route pour POST /api/tasks (à l’intérieur du routeur, ce chemin est '/'). Elle lit title dans le corps JSON, par exemple { "title": "Order new chairs" }.
  2. Construis la nouvelle tâche avec quatre champs :
    • id : obtenu à partir de la fonction nextId() dans store.js. Importe-la à côté de tasks.
    • title : extrait du corps.
    • done : false.
    • createdAt : new Date().toISOString(), l’heure actuelle sous forme de texte.

    Ajoute-la au tableau tasks, afin que GET /api/tasks l’affiche aussi.

  3. Réponds avec le statut 201 et la nouvelle tâche au format JSON. Définis l’en-tête Location sur l’URL de la tâche : pour la tâche 4, c’est /api/tasks/4. Après un nouveau « Jouer », le corps de la réponse ressemble à ceci (ton createdAt correspond au moment où tu l’envoies) :
    { "id": 4, "title": "Order new chairs", "done": false, "createdAt": "2026-10-30T09:12:44.512Z" }
  4. Lorsque le corps ne contient pas de title, réponds avec le statut 400 et { "error": "title is required" }, et n’ajoute rien à la liste.

Essaie : choisis POST, le chemin /api/tasks et le corps { "title": "Order new chairs" }. Tu devrais voir 201 et la tâche ci-dessus avec l’id 4, et l’onglet En-têtes de la réponse affiche Location: /api/tasks/4. Envoie GET /api/tasks/4 : tu récupères la même tâche. Ensuite, envoie POST avec {} à /api/tasks : tu obtiens le statut 400 avec l’erreur, et GET /api/tasks affiche toujours 4 tâches, car la requête POST refusée n’a rien ajouté.

Essayez vous-même

import { Router } from 'express';
import { tasks } from '../store.js';

const router = Router();

router.get('/', (req, res) => {
    res.json(tasks);
});

router.get('/:id', (req, res) => {
    const task = tasks.find((t) => t.id === Number(req.params.id));
    if (!task) {
        return res.status(404).json({ error: 'Task not found' });
    }
    res.json(task);
});

export default router;

Toutes les leçons de API REST

Entraînez-vous par vous-même : Playground Express