ゆるテックノート

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

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

成功パターン

メソッドごとに典型的な成功コードを選びます。レスポンスボディ有無との相性も要確認です。

成功コードの目安

メソッド 主な成功コード 使いどころ
GET/HEAD 200 OK / 304 Not Modified 取得。条件付きGETで一致したら304(RFC 9110 13.1)。
POST 201 Created / 202 Accepted / 200 OK 作成なら201+Locationヘッダー。非同期受付なら202。既存リソース更新をPOSTで行うなら200も選択肢。
PUT 200 OK / 204 No Content / 201 Created 完全置換。ボディを返すなら200、返さないなら204。同じURIが初登場なら201もあり。
PATCH 200 OK / 204 No Content 部分更新。ボディを返すなら200、返さないなら204。
DELETE 200 OK / 204 No Content 削除。冪等性確保のため、すでに消えていても204/200で返す設計が無難。
OPTIONS 204 No Content 通信可否の応答。CORSプレフライトで多用。

よく出るエラーコード

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

エラーコードの選び方

コード 典型メソッド 意味とヒント
400 Bad Request 全般 リクエスト形式エラー。ボディにエラー詳細を。
401 Unauthorized 全般 認証が必要。WWW-Authenticateヘッダーを返す。
403 Forbidden 全般 認証は通ったが権限不足。
404 Not Found 全般 URIにリソースなし。DELETEの二度目でも404を返さない設計も多い。
405 Method Not Allowed 全般 そのURIで未サポートのメソッド。Allowヘッダー必須(RFC 9110 15.5.6)。
409 Conflict POST/PUT/PATCH/DELETE 競合(例: 重複キー、状態衝突)。ボディに解決策を書くと親切。
412 Precondition Failed PUT/PATCH/DELETE If-Match/If-Unmodified-Sinceが不一致。悲観・楽観ロックの失敗で使う。
415 Unsupported Media Type POST/PUT/PATCH Content-Typeが未対応。対応してほしい形式を示すと良い。
422 Unprocessable Content POST/PUT/PATCH バリデーションNG。ドメインエラーの詳細をJSONで返すのに便利(RFC 9110 15.5.21)。
429 Too Many Requests 全般 レート制限。Retry-Afterを添える。
500/503 全般 サーバー内エラー / 一時的に利用不可。503ではRetry-Afterが有効。

設計メモ

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

運用のコツ

  • POSTで作成したらLocationヘッダーで新リソースURIを示す(RFC 9110 10.2.2)。
  • 条件付きリクエスト(If-Match/If-None-Match)を併用し、412や304を正しく返すと中間キャッシュとも仲良くできる。
  • DELETEは冪等性を意識して、存在しなくても204/200を返す設計を検討する。
  • 仕様外のカスタムコードは避け、問題はレスポンスボディで説明する(application/problem+jsonなど)。

まとめ

RFC 9110の意味づけに沿ってコードを選べば、クライアント・キャッシュ・中継が予測しやすくなります。迷ったら201/204/409/412あたりを軸に検討すると整理しやすいです。