1. 一覧が返る
  2. 1件が返る
  3. 無い id は404
  4. 登録は201で id が採番される
  5. 更新は200で新しい内容が返る
  6. 削除は204で本文なし
  7. 無い id の削除は404
コース一覧
Node.js入門
つくる:商品CRUD完成

Node.js入門

Node.jsの実行モデル、npm、Expressによるルーティング、REST API設計、データベース接続、トランザクションを使った購入処理、トークン認証まで、バックエンド開発の基礎を、毎レッスン実際にコードを書き、フリマアプリのAPIを自分の手で作りながら学びます。

1
Node.jsとは
01. Node.jsとは15分
02. スクリプトを実行する15分
03. npmとは15分
04. package.json15分
05. npmスクリプト15分
06. つくる:プロジェクト始動20分
07. 第1章クイズ10分
2
モジュールと非同期の復習
01. import/export15分
02. ファイルを読み書きする15分
03. async/await復習15分
04. JSONの取り回し15分
05. つくる:データ層20分
06. 第2章クイズ10分
3
はじめてのサーバー
01. サーバーとリクエスト15分
02. Expressを導入する15分
03. ルーティング15分
04. JSONを返す15分
05. 開発の回し方15分
06. つくる:サーバー始動20分
07. 第3章クイズ10分
4
REST APIのきほん
01. RESTの考え方15分
02. 一覧を返す15分
03. 1件を返す15分
04. 登録を受ける15分
05. 更新と削除15分
06. ステータスコード15分
07. つくる:商品CRUD完成20分
08. 第4章クイズ10分
5
リクエスト処理と検証
01. クエリパラメータ15分
02. 並び替えとページング15分
03. 入力検証15分
04. ミドルウェア15分
05. エラーハンドリング15分
06. つくる:検索API完成20分
07. 第5章クイズ10分
6
データベース接続
01. DBにつなぐ15分
02. 一覧・詳細をDB化15分
03. 出品をDB化15分
04. SQLインジェクション20分
05. 更新・削除をDB化15分
06. 購入トランザクション20分
07. つくる:DB版fleama20分
08. 第6章クイズ10分
7
認証のきほん
01. 認証と認可15分
02. パスワードハッシュ15分
03. ログインとトークン15分
04. 保護ルート15分
05. 本人のものだけ15分
06. つくる:認証完備20分
07. 第7章クイズ10分
8
総合制作
01. fleama API完成20分
02. Reactと接続する20分
03. サーバーで常駐させる20分
04. 自由拡張20分
05. 完成と次のステップ15分

つくる:商品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 つを並べると、変更系がどれも同じ骨格をしていることが分かります。

  1. 対象を探す
  2. 無ければ 404 を返して抜ける
  3. あれば処理して、決まったコードで返す

この繰り返しに気付けたなら、第4章の狙いは達成できています。同じ形が続くということは、あとでまとめて直せるということでもあります。第5章のミドルウェアで、その手立てを学びます。

ここまでに手に入れたもの

何をどのレッスンで
リソースとメソッドで設計するRESTの考え方
コレクションを返す一覧を返す
パスの一部を受け取り、404 を返す1件を返す
本文を受け取り、201 を返す登録を受ける
書き換えと 204 の削除更新と削除
番号で結果を伝えるステータスコード

手を動かす

演習では、5 つのルートをすべて備えた商品 API を組み立てます。第4章の総仕上げです。

要件

  1. GET /items は一覧を配列で、GET /items/:id は 1 件を返す(無ければ 404)
  2. POST /items は「最大の id + 1」で登録し 201 で返す(sold は false)
  3. 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":"商品が見つかりません"}"

ヒント

初期コードには一覧だけがあります。残り 4 つを足していきます

変更系はどれも「探す・無ければ 404・あれば処理」の同じ骨格です

返すときは必ず `toPublic(...)` を通して、`ownerEmail` が外に出ないようにします

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/10

関連レッスン

  • 第4章クイズ

    RESTとステータスコードの理解を4択で確認します。

  • クエリパラメータ

    キーワードとカテゴリで絞る検索APIを書き、検索条件を受け取れるようになります。

  • DBにつなぐ

    接続して1行取り出すところまで確かめ、NodeからSQLを発行できるようになります。

  • 認証と認可

    未ログインで出品APIを叩いて課題を確かめ、認証と認可を区別できるようになります。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • エンドポイント「この URL を叩くとこの機能が動く」入口の住所
  • APIアプリ間でデータをやり取りする窓口
  • 設計何をどう作るかを決める前工程
  • 処理計算や代入を表す長方形
  • ミドルウェアリクエストとレスポンスの間に挟まる処理関数。
  • メソッドクラスに属する関数
  • ステータスコード200/201/404 など結果を示す3桁の数値
  • 配列サイズ固定の同型データの集まり
main.js
学習モード
エディタを読み込んでいます

メモ

つくる:商品CRUD完成

⌘S で保存