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);Défi
FacileLes 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.
- Dans
routes/tasks.js, ajoute une route pourPOST /api/tasks(à l’intérieur du routeur, ce chemin est'/'). Elle littitledans le corps JSON, par exemple{ "title": "Order new chairs" }. - Construis la nouvelle tâche avec quatre champs :
id: obtenu à partir de la fonctionnextId()dansstore.js. Importe-la à côté detasks.title: extrait du corps.done:false.createdAt:new Date().toISOString(), l’heure actuelle sous forme de texte.
Ajoute-la au tableau
tasks, afin queGET /api/tasksl’affiche aussi. - Réponds avec le statut 201 et la nouvelle tâche au format JSON. Définis l’en-tête
Locationsur 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 (toncreatedAtcorrespond au moment où tu l’envoies) :{ "id": 4, "title": "Order new chairs", "done": false, "createdAt": "2026-10-30T09:12:44.512Z" } - 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
1Ressources et verbes
Ressources et URLCréer avec POST4Navigateurs, versions et configuration
Qu’est-ce qu’une origineAutoriser une autre origineCORSUne page qui appelle l’APIEntraînez-vous par vous-même : Playground Express