ゆるテックノート

HTTPメソッド × ステータスコード早見表

「このAPI、成功時は201?204?」と迷ったときに参照できる表です。RFC 9110の意味づけに沿って、実務でよく出る組み合わせを整理しました。

成功パターン

2xxは成功を示します。表には再検証で使う3xxの304も併記しています。HEADの応答、204、304には本文を付けられません。202は処理完了を保証しません。

成功コードの目安

メソッド 主な成功コード 使いどころ
GET/HEAD 200 OK / 304 Not Modified 取得。条件付きGET/HEADで変更がなければ304。HEADは200でも本文なし。GETの有効な部分取得では206も使う。
POST 201 Created / 202 Accepted / 200 OK 作成なら201+Locationヘッダー。非同期受付なら202。既存リソース更新をPOSTで行うなら200も選択肢。
PUT 200 OK / 204 No Content / 201 Created 現在の表現を更新した成功は200または204。現在の表現がなく新規作成に成功した場合は201が必要(RFC 9110 §9.3.4)。
PATCH 200 OK / 204 No Content 更新の成功は200や204。作成可能なパッチ形式・APIでは201となる場合もある(RFC 5789)。
DELETE 200 OK / 204 No Content / 202 Accepted 完了して説明を返すなら200、本文なしなら204、未完了の受付なら202。再要求の404も冪等性と矛盾しない。
OPTIONS 204 No Content 通信可否の応答。CORSプレフライトで多用。

よく出るエラーコード

仕様に沿ったエラーを返すとクライアントが自動リトライやUXを組みやすくなります。

エラーコードの選び方

コード 典型メソッド 意味とヒント
400 Bad Request 全般 リクエスト形式エラー。ボディにエラー詳細を。
401 Unauthorized 全般 認証が必要。WWW-Authenticateヘッダーを返す。
403 Forbidden 全般 要求を理解したが実行を拒否。権限不足は一例で、認証済みであることは必須条件ではない。
404 Not Found 全般 現在の表現がない、または存在を明かさない。DELETEの再要求で返しても冪等性に反しない。
405 Method Not Allowed 全般 そのURIで未サポートのメソッド。Allowヘッダー必須(RFC 9110 15.5.6)。
409 Conflict POST/PUT/PATCH/DELETE 競合(例: 重複キー、状態衝突)。ボディに解決策を書くと親切。
412 Precondition Failed PUT/PATCH/DELETE 要求ヘッダーで指定された前提条件が不成立。ロック失敗全般のコードではない。
415 Unsupported Media Type POST/PUT/PATCH 要求内容の形式やContent-Encodingなどが未対応。対応可能な形式を示すと良い。
422 Unprocessable Content POST/PUT/PATCH メディアタイプを理解し、構文も正しいが、内容の指示を処理できない。JSON構文の破損とは区別する(RFC 9110 §15.5.21)。
429 Too Many Requests 全般 レート制限(RFC 6585 §4)。Retry-Afterは任意で添えられる。応答はキャッシュ保存不可。
500/503 全般 サーバー内エラー / 一時的に利用不可。503ではRetry-Afterが有効。

設計メモ

コードとメソッドの相性を少し意識するだけで、クライアント実装がぐっと楽になります。

運用のコツ

  • POSTで作成したらLocationヘッダーで新リソースURIを示す(RFC 9110 10.2.2)。
  • 条件付きリクエスト(If-Match/If-None-Match)を併用し、412や304を正しく返すと中間キャッシュとも仲良くできる。
  • DELETEの再要求でコードが変わっても、意図した効果が同じなら冪等性を保てます。応答が失われた場合に備え、APIの状態確認方法を用意します。
  • 意味の合う標準コードを使い、本文を返せる応答では問題の詳細を説明します。application/problem+json(RFC 9457)も利用できます。204にエラー詳細のJSONを付けてはいけません。

まとめ

コードはメソッド名だけでなく、実際の処理結果と条件に合わせて選びます。安全性と冪等性、304・412と条件付きリクエストも合わせて確認してください。

仕様・関連資料

RFC 9110 §9 / §15 / RFC 5789 / RFC 6585 §4 / RFC 9457