יצירה באמצעות POST
חלק מהיחידה REST APIs במסלול ה-Node.js של Coddy. שיעור 2 מתוך 25.
לקוח שמוסיף משימה צריך לדעת היכן המשימה החדשה נמצאת. הוא שולח את המשאב החדש לכתובת ה-URL של הרשימה באמצעות POST, והשרת משיב 201 Created עם המשאב ועם כותרת Location שמציינת את כתובת ה-URL שלו.
POST /api/events { "name": "Launch party" }
201 Created
Location: /api/events/12
{ "id": 12, "name": "Launch party" }השרת בוחר את המזהה, כך ששני לקוחות לעולם לא יוכלו לטעון לאותו מזהה. בעזרת הכותרת Location, הלקוח יכול לשלוף את האירוע החדש בלי לבנות את כתובת ה-URL בעצמו. res.location(path) מגדירה את הכותרת הזו, והיא משתלבת בשרשור כמו res.status:
res.status(201).location(`/api/events/${event.id}`).json(event);אתגר
קללקוחות צריכים דרך להוסיף משימות. הוסיפו נתיב POST שיוצר משימה ומודיע ללקוח היכן נמצאת המשימה החדשה.
- ב־
routes/tasks.js, הוסיפו נתיב עבורPOST /api/tasks(בתוך הנתב, הנתיב הזה הוא'/'). הוא קורא אתtitleמתוך גוף ה־JSON, לדוגמה{ "title": "Order new chairs" }. - בנו את המשימה החדשה עם ארבעה שדות:
id: מתוך הפונקציהnextId()שב־store.js. ייבאו אותה לצדtasks.title: מתוך הגוף.done:false.createdAt:new Date().toISOString(), השעה הנוכחית כטקסט.
הוסיפו אותה למערך
tasks, כדי שגםGET /api/tasksיציג אותה. - השיבו עם סטטוס 201 ועם המשימה החדשה כ־JSON. הגדירו את הכותרת
Locationלכתובת ה־URL של המשימה עצמה: עבור משימה 4 זו הכתובת/api/tasks/4. בהרצה חדשה, גוף התגובה נראה כך (createdAtשלכם יהיה הזמן שבו תשלחו את הבקשה):{ "id": 4, "title": "Order new chairs", "done": false, "createdAt": "2026-10-30T09:12:44.512Z" } - אם אין בגוף
title, השיבו עם סטטוס 400 ועם{ "error": "title is required" }, ואל תוסיפו דבר לרשימה.
נסו זאת: בחרו POST, הנתיב /api/tasks, והגוף { "title": "Order new chairs" }. אתם אמורים לראות 201 ואת המשימה שלמעלה עם מזהה 4, ובכרטיסייה Headers של התגובה מופיע Location: /api/tasks/4. שלחו GET /api/tasks/4: תקבלו בחזרה את אותה המשימה. לאחר מכן שלחו POST עם {} אל /api/tasks: תקבלו 400 עם השגיאה, ו־GET /api/tasks עדיין יציג 4 משימות, כי בקשת ה־POST שנדחתה לא הוסיפה דבר.
נסו בעצמכם
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;
כל השיעורים ביחידה REST APIs
1משאבים ופעלים
משאבים וכתובות URLיצירה באמצעות POSTתרגלו בעצמכם: Express אונליין