Mises à jour partielles avec PATCH
Fait partie de la section API REST du Journey Node.js de Coddy. Leçon 3 sur 18.
Marquer une tâche comme terminée ne devrait pas signifier renvoyer son titre. PATCH ne contient que les champs qui changent, et le serveur conserve tous les autres champs tels quels.
// PATCH /api/invoices/7 { "paid": true }
const { paid, amount } = req.body ?? {};
if (paid !== undefined) invoice.paid = paid;
if (amount !== undefined) invoice.amount = amount;
res.json(invoice);Vérifie chaque champ par rapport à undefined, et non avec if (paid) : false est une valeur qu’un client peut envoyer. Copie les champs un par un au lieu de répartir req.body sur l’objet, afin qu’un client ne puisse pas modifier id. Une requête sans corps laisse req.body à undefined, ce que couvre ?? {}. La réponse est 200 avec la facture entière mise à jour.
Défi
FacilePATCH /api/tasks/:idne modifie que les champs envoyés dans le corps,titleoudone.- Il répond avec le code 200 et la tâche complète.
- Un identifiant inconnu renvoie le code 404 avec
{ "error": "Task not found" }.
Envoyez PATCH /api/tasks/2 avec { "done": true }, puis GET /api/tasks/2, puis le même PATCH vers /api/tasks/99.
Essayez vous-même
import { Router } from 'express';
import { nextId, 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);
});
router.post('/', (req, res) => {
const { title } = req.body ?? {};
if (!title) {
return res.status(400).json({ error: 'title is required' });
}
const task = { id: nextId(), title, done: false, createdAt: new Date().toISOString() };
tasks.push(task);
res.status(201).location(`/api/tasks/${task.id}`).json(task);
});
export default router;
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de API REST
1Ressources et verbes
Ressources et URLCréer avec POST