HTTPメソッドからCRUD操作へのマッピング

RESTful API設計時にHTTPメソッドをCreate、Read、Update、Delete操作にマッピングする方法を解説します。

REST Patterns

詳細な説明

CRUDからHTTPへのマッピング

REST APIは慣例的にデータベースのCRUD(Create、Read、Update、Delete)操作をHTTPメソッドにマッピングします:

標準マッピング

CRUD操作 HTTPメソッド エンドポイントパターン
作成 POST POST /resources POST /api/users
読み取り(一覧) GET GET /resources GET /api/users
読み取り(単体) GET GET /resources/:id GET /api/users/42
更新(完全) PUT PUT /resources/:id PUT /api/users/42
更新(部分) PATCH PATCH /resources/:id PATCH /api/users/42
削除 DELETE DELETE /resources/:id DELETE /api/users/42

URI設計

リソースは名詞であり、動詞ではありません:

# 良い例
POST /api/users          (ユーザーを作成)
GET  /api/users/42       (ユーザー42を取得)
PUT  /api/users/42       (ユーザー42を更新)

# 悪い例
POST /api/createUser
GET  /api/getUser?id=42
POST /api/updateUser

ネストされたリソース

GET    /api/users/42/posts         (ユーザー42の投稿一覧)
POST   /api/users/42/posts         (ユーザー42の投稿を作成)
GET    /api/users/42/posts/7       (ユーザー42の投稿7を取得)
DELETE /api/users/42/posts/7       (投稿7を削除)

ステータスコードの慣例

操作 成功ステータス よくあるエラー
POST(作成) 201 Created 400, 409, 422
GET(読み取り) 200 OK 404
PUT(置換) 200 or 204 400, 404, 409
PATCH(更新) 200 or 204 400, 404, 422
DELETE(削除) 204 No Content 404

基本CRUD以外

一部の操作はCRUDにきれいに収まりません:

  • 検索GET /api/users/search?q=aliceまたは複雑なクエリの場合POST /api/users/search
  • バルク操作 — IDのボディを持つPOST /api/users/bulk-delete
  • アクション — 非CRUDアクション用のPOST /api/orders/42/cancel

ユースケース

新しいREST APIを設計するチームがデータベーステーブルをリソースエンドポイントにマッピングします:商品作成はPOST /api/products、読み取りはGET /api/products/:id、価格更新はPATCH /api/products/:id、廃番商品の削除はDELETE /api/products/:idです。

試してみる — HTTP Method Reference

フルツールを開く