コンテンツにスキップ

面接頻出REST APIの4大概念:冪等性・PUT vs PATCH・ページネーション・レートリミット

概要

REST API 面接で最もよく問われる4つの概念をまとめて整理。

詳細

1. HTTP メソッドの冪等性(Idempotency)

冪等 = 同じリクエストを何度送っても結果が変わらない こと。

メソッド 冪等 安全(副作用なし) 用途
GET 取得
HEAD ヘッダのみ取得
PUT リソース全体を置き換え
DELETE 削除(2回目は 404 だが状態は変わらない)
POST 作成(毎回新しいリソースが生まれる)
PATCH 部分更新(設計次第で冪等にもできる)

2. PUT vs PATCH

# PUT: リソース全体を置き換える(全フィールドが必要)
PUT /users/123
{"name": "Alice", "email": "alice@new.com", "role": "admin"}

# PATCH: 指定フィールドだけ更新
PATCH /users/123
{"email": "alice@new.com"}

3. Pagination・Filtering・Versioning

# Offset Pagination(シンプルだが大規模では性能劣化)
GET /posts?page=3&limit=20

# Cursor Pagination(推奨:大量データでも安定・重複なし)
GET /posts?after=eyJpZCI6MTAwfQ&limit=20

# Filtering
GET /products?category=electronics&status=active&price_max=1000

# Versioning(破壊的変更を安全に行うため)
GET /api/v1/users   → 旧クライアント向け(維持)
GET /api/v2/users   → 新クライアント向け(変更あり)

4. Rate Limiting & Throttling

# ヘッダでクライアントに状況を伝える
X-RateLimit-Limit: 100      # 1時間あたりの上限
X-RateLimit-Remaining: 20   # 残り回数
X-RateLimit-Reset: 1699200000  # リセット時刻(Unix時刻)

# 超過時のレスポンス
HTTP 429 Too Many Requests
Retry-After: 3600

Rate Limit のアルゴリズム: - Token Bucket: バケツにトークンが補充され、リクエストのたびに消費 - Sliding Window: 直近N秒のリクエスト数を計算(実装は Redis + Sorted Set) - Fixed Window: 固定時間帯ごとにカウンター(実装が最もシンプル)

なぜ重要か / いつ使うか

  • REST API の面接問題は必ずこの4カテゴリから出題される
  • API 設計レビューで「この実装で良いか」の判断基準として