REST は標準の HTTP メソッド をリソースに作用する動詞として使います。CRUD (Create, Read, Update, Delete) への一般的な対応は:
REST は標準の HTTP メソッド をリソースに作用する動詞として使います。CRUD (Create, Read, Update, Delete) への一般的な対応は:
| CRUD | Method | 典型的な用途 |
|---|
| Create | POST | コレクションに新しいリソースを追加 |
| Read | GET | リソースまたはリストを取得 |
| Update (全体) | PUT | リソースを丸ごと置き換え |
| Update (部分) | PATCH | 一部のフィールドを変更 |
| Delete | DELETE | リソースを削除 |
POST /users HTTP/1.1
Content-Type: application/json
{ "name": "Ann", "email": "[email protected]" }
HTTP/1.1 201 Created
Location: /users/42
{ "id": 42, "name": "Ann", "email": "[email protected]" }
PUT /users/42 は 表現全体 を送って置き換えます。PATCH /users/42 は 変更するフィールドだけ を送ります (例: { "email": "[email protected]" })。
これらは 2 つの異なる性質です:
GET、HEAD、OPTIONS は safe です。GET、PUT、DELETE、HEAD は idempotent です。Method Safe? Idempotent?
GET yes yes
HEAD yes yes
PUT no yes (同じ body で 2 回置き換え = 同じ結果)
DELETE no yes (2 回削除 = 削除済みのまま)
PATCH no no* (patch 次第; 保証されない)
POST no no (2 回 POST すると通常 2 つのリソースが作られる)
面接官がこれを尋ねるのは、信頼できる API を作れるほど HTTP のセマンティクスを理解しているか見るためです。safe/idempotent の区別は学術的ではありません: client、プロキシ、CDN が何を許されるかを直接支配します。Safe メソッドは自由にキャッシュ・プリフェッチできます。Idempotent メソッドはネットワークタイムアウト後に副作用を重複させるリスクなく 自動的に retry できます — だから client は PUT や DELETE を安全に retry できますが、POST の retry には注意が必要です (2 つの order を作るかもしれない)。典型的な間違いは GET で副作用を起こすこと (例: GET /users/42/delete) で、キャッシュを壊し、クローラが誤ってデータを変更しかねません。正しいメソッドを選び — その safety と idempotency の契約を尊重すること — が、API を予測可能で、ツールを組みやすく安全にします。
ジュニアからシニアまで、詳細な回答付きのIT面接質問ライブラリ。
寄付する