更新と削除
設計図の残り2行
プレーンテキスト
PUT /items/:id 商品を書き換える
DELETE /items/:id 商品を削除するどちらも「どれに対して」がはっきりしているので、個別のパスに対して行います。
PUT は書き換える
更新は、詳細と登録を組み合わせた形になります。まず対象を探し、無ければ 404、あれば本文の内容で書き換えます。
JavaScript
app.put("/items/:id", (req, res) => {
const item = items.find((i) => i.id === Number(req.params.id));
if (!item) {
return res.status(404).json({ error: "商品が見つかりません" });
}
item.name = req.body.name;
item.price = req.body.price;
res.json(item);
});探す・無ければ 404・あれば処理する、という流れは変更系でいつも同じです。
id は書き換えさせない
本文に id が入っていても、それで上書きしてはいけません。
JavaScript
item.id = req.body.id; // 危ない登録のときと同じ理由です。id は対象を指し示すためのもので、中身ではありません。パスで指定した id が正であり、本文の id は無視します。
DELETE は消す
削除は配列から取り除きます。
JavaScript
app.delete("/items/:id", (req, res) => {
const index = items.findIndex((i) => i.id === Number(req.params.id));
if (index === -1) {
return res.status(404).json({ error: "商品が見つかりません" });
}
items.splice(index, 1);
res.status(204).end();
});204 は本文が無い
削除の応答には 204 を使います。「成功したが、返すものは無い」という意味です。
消したものを返しても仕方がないので、本文は空にします。res.json(...) ではなく res.status(204).end() と書くのはそのためです。204 は本文を持てない決まりなので、res.json で何か返そうとしても無視されます。
手を動かす
演習では、更新と削除の API を作ります。どちらも「無ければ 404」を忘れずに書いてください。
要件
PUT /items/:idはnameとpriceを書き換え、{id, name, price}を返すDELETE /items/:idは商品を取り除き、204 を本文なしで返す- どちらも見つからないときは 404 で
{"error":"商品が見つかりません"}を返す
入出力例
request("PUT", "/items/1", {"name":"革のスニーカー","price":5200}) → "200 {"id":1,"name":"革のスニーカー","price":5200}"
request("PUT", "/items/2", {"id":99,"name":"デニムジャケット","price":6000}) → "200 {"id":2,"name":"デニムジャケット","price":6000}"
request("PUT", "/items/999", {"name":"x","price":1}) → "404 {"error":"商品が見つかりません"}"
request("DELETE", "/items/1") → "204 "
request("DELETE", "/items/999") → "404 {"error":"商品が見つかりません"}"ヒント
編集 ゆめさく編集部