一覧を返す
設計図の1行目を実装する
前のレッスンで書いた表の 1 行目から始めます。
プレーンテキスト
GET /items 商品一覧を返す第3章で似たものを作りました。今回はそれを、API として使える形に整えます。
一覧は必ず配列で返す
商品が 1 件でも、0 件でも、返すのは配列です。
JavaScript
app.get("/items", (req, res) => {
res.json(items);
});0 件のときに { "message": "商品がありません" } のようなオブジェクトを返したくなりますが、してはいけません。受け取る側が困るからです。
JavaScript
// 受け取る側
const items = await response.json();
items.map((item) => ...); // 配列でないと落ちる同じパスは、いつ呼んでも同じ形を返す。 中身が空でも形は変えない、というのが約束です。0 件なら [] を返します。
空も正常です
商品が 1 件も無いのは、エラーではありません。「探したけれど無かった」は、探す処理としては成功しています。
ですから 404 ではなく 200 を返し、本文は [] にします。404 は「そのパス自体が無い」ときのものです。次のレッスンで、404 を返すべき場面が出てきます。
返す前に整える
第3章で触れたとおり、持っているものを全部返す必要はありません。
JavaScript
app.get("/items", (req, res) => {
res.json(items.map((item) => ({
id: item.id,
name: item.name,
price: item.price,
sold: item.sold,
})));
});一覧に出す項目は、一覧の画面で必要なものだけです。出品者の連絡先や、商品説明の長い文章は、詳細を見るときに取れば足ります。一覧が軽くなるという実利もあります。
手を動かす
演習では、商品一覧の API を作ります。空のときの振る舞いにも気を配ってください。
要件
GET /itemsはidnamepricesoldだけにした商品の配列を返すGET /emptyは空の配列[]を 200 で返す- どちらも
ownerEmailを含めない
入出力例
request("GET", "/items") → "200 [{"id":1,"name":"レザースニーカー","price":4800,"sold":false},{"id":2,"name":"古着のデニムジャケット","price":6200,"sold":false},{"id":3,"name":"木製のスツール","price":3500,"sold":true}]"
request("GET", "/empty") → "200 []"ヒント
編集 ゆめさく編集部