עדכונים חלקיים באמצעות PATCH
חלק מהיחידה REST APIs במסלול ה-Node.js של Coddy. שיעור 3 מתוך 18.
סימון משימה כהושלמה לא אמור לדרוש שליחה חוזרת של הכותרת שלה. PATCH מעביר רק את השדות שמשתנים, והשרת משאיר את כל שאר השדות כפי שהיו.
// 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);בדקו כל שדה מול undefined, ולא באמצעות if (paid): false הוא ערך שהלקוח יכול לשלוח. העתיקו את השדות בזה אחר זה במקום לפרוס את req.body על פני האובייקט, כדי שלקוח לא יוכל לשנות את id. בקשה ללא גוף משאירה את req.body במצב undefined, וזה מה ש-?? {} מטפל בו. התשובה היא 200 עם החשבונית המעודכנת כולה.
אתגר
קלPATCH /api/tasks/:idמשנה רק את השדות שהגוף שולח,titleאוdone.- הוא מחזיר 200 עם המשימה כולה.
- מזהה לא מוכר מחזיר 404 עם
{ "error": "Task not found" }.
שלחו PATCH /api/tasks/2 עם { "done": true }, ואז GET /api/tasks/2, ואז את אותה בקשת PATCH אל /api/tasks/99.
נסו בעצמכם
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;
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה REST APIs
1משאבים ופעלים
משאבים וכתובות URLיצירה באמצעות POST