Teilaktualisierungen mit PATCH
Teil des Abschnitts REST-APIs der Node.js-Journey von Coddy. Lektion 3 von 18.
Eine Aufgabe als erledigt zu markieren, sollte nicht bedeuten, ihren Titel erneut zu senden. PATCH überträgt nur die Felder, die sich ändern, und der Server behält alle anderen Felder unverändert bei.
// 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);Prüfe jedes Feld auf undefined, nicht mit if (paid): false ist ein Wert, den ein Client senden kann. Kopiere die Felder einzeln, statt req.body über das Objekt zu verteilen, damit ein Client die id nicht ändern kann. Bei einer Anfrage ohne Body ist req.body nicht definiert; genau das fängt ?? {} ab. Die Antwort ist 200 und enthält die vollständig aktualisierte Rechnung.
Aufgabe
EinfachPATCH /api/tasks/:idändert nur die Felder, die im Body gesendet werden:titleoderdone.- Die Antwort enthält den Statuscode 200 und die vollständige Aufgabe.
- Bei einer unbekannten ID lautet die Antwort 404 mit
{ "error": "Task not found" }.
Sende PATCH /api/tasks/2 mit { "done": true }, dann GET /api/tasks/2 und anschließend dasselbe PATCH an /api/tasks/99.
Probier es selbst
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;
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in REST-APIs
1Ressourcen und Verben
Ressourcen und URLsErstellen mit POST