つくる:商品CRUD完成
新しいことは出てきません
この回では、新しい知識は 1 つも出てきません。第4章の 5 つのルートを 1 つの createApp にまとめて、fleama の商品 API を完成させます。
設計図と突き合わせる
最初に書いた表がそのまま完成の基準になります。
プレーンテキスト
GET /items 商品一覧を返す 200
GET /items/:id 商品1件を返す 200 / 404
POST /items 商品を登録する 201
PUT /items/:id 商品を書き換える 200 / 404
DELETE /items/:id 商品を削除する 204 / 404この 5 行が揃うと、フリマとして必要な操作が一通りできます。CRUD と呼ばれる 4 つの操作、つまり作る・読む・書き換える・消すが、これで出そろいました。
同じ形が繰り返される
5 つを並べると、変更系がどれも同じ骨格をしていることが分かります。
- 対象を探す
- 無ければ 404 を返して抜ける
- あれば処理して、決まったコードで返す
この繰り返しに気付けたなら、第4章の狙いは達成できています。同じ形が続くということは、あとでまとめて直せるということでもあります。第5章のミドルウェアで、その手立てを学びます。
ここまでに手に入れたもの
| 何を | どのレッスンで |
|---|---|
| リソースとメソッドで設計する | RESTの考え方 |
| コレクションを返す | 一覧を返す |
| パスの一部を受け取り、404 を返す | 1件を返す |
| 本文を受け取り、201 を返す | 登録を受ける |
| 書き換えと 204 の削除 | 更新と削除 |
| 番号で結果を伝える | ステータスコード |
手を動かす
演習では、5 つのルートをすべて備えた商品 API を組み立てます。第4章の総仕上げです。
要件
GET /itemsは一覧を配列で、GET /items/:idは 1 件を返す(無ければ 404)POST /itemsは「最大の id + 1」で登録し 201 で返す(soldはfalse)PUT /items/:idはnameとpriceを書き換えて 200、DELETE /items/:idは 204 を本文なしで返す(どちらも無ければ 404)
入出力例
request("GET", "/items") → "200 [{"id":1,"name":"レザースニーカー","price":4800,"sold":false},{"id":2,"name":"古着のデニムジャケット","price":6200,"sold":false}]"
request("GET", "/items/2") → "200 {"id":2,"name":"古着のデニムジャケット","price":6200,"sold":false}"
request("GET", "/items/999") → "404 {"error":"商品が見つかりません"}"
request("POST", "/items", {"name":"木製のスツール","price":3500}) → "201 {"id":3,"name":"木製のスツール","price":3500,"sold":false}"
request("PUT", "/items/1", {"id":99,"name":"革のスニーカー","price":5200}) → "200 {"id":1,"name":"革のスニーカー","price":5200,"sold":false}"
request("DELETE", "/items/1") → "204 "
request("DELETE", "/items/999") → "404 {"error":"商品が見つかりません"}"ヒント
編集 ゆめさく編集部