Menu
CoddyTech

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.

challenge icon

Aufgabe

Einfach
  • PATCH /api/tasks/:id ändert nur die Felder, die im Body gesendet werden: title oder done.
  • 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;
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in REST-APIs