POSTによる作成
CoddyのNode.jsジャーニー「REST API」セクションの一部。レッスン 2/18。
タスクを追加するクライアントは、新しいタスクがどこにあるかを知る必要があります。新しいリソースをリストのURLにPOSTで送信すると、サーバーはリソースと、そのURLを示すLocationヘッダーを付けて201 Createdを返します。
POST /api/events { "name": "Launch party" }
201 Created
Location: /api/events/12
{ "id": 12, "name": "Launch party" }サーバーがidを決めるため、2つのクライアントが同じidを使うことはありません。Locationヘッダーがあれば、クライアントは自分でURLを組み立てずに新しいイベントを取得できます。res.location(path)はこのヘッダーを設定し、res.statusと同じようにチェーンできます。
res.status(201).location(`/api/events/${event.id}`).json(event);チャレンジ
簡単POST /api/tasksに{ "title" }を送ると、新しいタスクとともに 201 を返します。store.jsのnextId()によるid、done: false、new Date().toISOString()によるcreatedAtが含まれます。Locationを/api/tasks/<id>に設定します。titleがない場合は 400 です。
{ "title": "Order new chairs" } を送信し、次に Location のパスに GET を行い、その後 {} を 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;