メインコンテンツへ
ネットワークネットワーク実践

RESTful API設計の原則として最も適切なものはどれか。

ア.エンドポイントのURLにはHTTPメソッドを含める(例: /getUserById, /deleteUser)
イ.ステートレス(Stateless):サーバはクライアントのセッション状態を保持せず、各リクエストは独立して完結する正解
ウ.GETリクエストでもリクエストボディにデータを含めてサーバに送信することが推奨される
エ.バージョン管理は不要で、APIは常に後方互換性を破壊してよい

解説

RESTのステートレス原則は「記憶力ゼロのウェイター」みたいなもの。毎回「ハンバーガーセット、ポテトはLサイズ、飲み物はコーラ」と全部言い直さなければならない。面倒に見えるが、どのウェイター(サーバインスタンス)が担当しても同じサービスができる→スケールアウトが簡単!

なぜ イ が正解か

RESTful APIの6つの制約条件の中核:①ステートレス:各HTTPリクエストは完全に独立し、前のリクエストの状態に依存しない。認証情報も毎回送る(Bearerトークン等)②その他の原則:リソース指向のURL(/users/123)、HTTPメソッドによる操作の表現、統一インターフェース、階層化システム、キャッシュ可能性。ステートレスにより水平スケールアウトが容易になる。

なぜ ア は間違いか

URLにメソッドを含める(/getUser, /deleteUser)はRESTアンチパターン。RESTではURLでリソースを表し(/users/123)、操作はHTTPメソッドで表現する(GET=取得、DELETE=削除)。

なぜ ウ は間違いか

GETリクエストにボディを含めることはHTTP仕様上「すべきでない」とされており、多くのサーバ/プロキシが無視する。GETはURLパラメータでデータを送る。

なぜ エ は間違いか

APIの後方互換性破壊は利用者に多大な影響を与えるため、バージョン管理(/v1/users、/v2/users等)がRESTのベストプラクティス。「バージョン管理不要」は誤り。

出典: AI生成問題(学習用)