【実務・中級編】HTTPステータスコード2xx(成功)の分類と詳細な意味 – HTTPプロトコル・通信規格実践ガイド

成功の裏側を読み解く:HTTP 2xx ステータスコードの「正しい」使い分け術

ネットワークエンジニアとして現場に立っていると、トラブルシューティングの際、ついエラーコード(4xxや5xx)ばかりに目を奪われがちです。しかし、実は「成功」を表す2xx系コードの使い分けこそが、Web APIの品格を決め、クライアント側のエンジニアを助け、さらにはキャッシュ制御や負荷分散の効率を左右する、いわば「プロの矜持」とも言える部分なのです。

今日は、RFC 9110の定義をベースにしつつ、現場で「なぜそのコードを選ぶのか」という文脈を紐解いていきましょう。

—

1. 200 OK:万能選手にして、諸刃の剣

最も馴染み深い `200 OK` は、リクエストが成功し、レスポンスボディに結果が含まれていることを示します。

現場の視点:
一見万能ですが、何でもかんでも `200 OK` で返す設計は、クライアント側の処理を複雑にします。「中身は空だけど成功」なのか「中身はエラーだが通信は成功(ボディ内にエラーJSONがある)」なのかを判別させる必要があるからです。

  • 活用例 (Python/requests):

import requests

典型的なGETリクエスト
response = requests.get(‘https://api.example.com/v1/resource/123’)

if response.status_code == 200:
# 成功してデータが返ってきた時
data = response.json()
print(f”取得完了: {data[‘name’]}”)

—

2. 201 Created:リソース誕生の証

POSTメソッドなどで新しいリソースが作成された際に返すべきコードです。この時、RFCの仕様上、`Location` ヘッダーで作成されたリソースのURIを返すのが礼儀です。

現場の視点:
クライアントは、`201` を受け取ったら次にそのリソースへアクセスする必要があるかもしれません。`Location` ヘッダーがあれば、フロントエンドやAPIクライアントは迷わず次のアクションへ繋げられます。

  • curlによる確認:

-i オプションでレスポンスヘッダーを確認
curl -i -X POST https://api.example.com/v1/users \
-d ‘{“name”: “Engineer”, “email”: “dev@example.com”}’
サーバー側は Location: /v1/users/999 を返すのがベストプラクティス

—

3. 202 Accepted:非同期処理への招待状

これが意外と使われていない「渋い」コードです。クライアントのリクエストは受け付けたが、処理はまだ完了していない(バックグラウンドで走っている)ことを伝えます。

現場の視点:
重い計算や外部API連携など、レスポンスを待たせるとタイムアウトしてしまう処理に最適です。クライアントに「リクエストは届いたから安心して待っててくれ」と伝えることで、UXを損なわずに設計できます。

—

4. 204 No Content:余計なデータを送らない美学

「リクエストは成功したが、レスポンスボディに含めるデータはない」という場合に使います。

現場の視点:
例えば `DELETE` リクエストや、特定のステータス更新 `PUT` などです。クライアント側は「ボディをパースしようとしてエラーになる」という無駄な処理を回避できます。ネットワーク帯域の節約にもなる、極めて知的な選択です。

  • Fetch APIでのハンドリング:

fetch(‘https://api.example.com/v1/resource/123’, { method: ‘DELETE’ })
.then(response => {
if (response.status === 204) {
// ボディがないことを前提に処理をスキップできる
console.log(‘リソースの削除完了’);
}
});

—

ステータスコード選びは「対話」である

Web APIはサーバーとクライアントの対話です。2xx系コードを適切に使い分けることは、単なる仕様遵守ではありません。

  • 200 OK: 「これが結果だ」
  • 201 Created: 「新しいやつを作ったぞ(場所はここだ)」
  • 202 Accepted: 「受け取った、今裏で動かしてる」
  • 204 No Content: 「成功した、でも返すものはない」

このように、コードひとつでサーバーの意図を明確に伝えることができます。デバッグの際、ログに並ぶステータスコードを見ただけで「設計者の意図」が手に取るようにわかる――そんな美しいAPIを設計できるエンジニアこそが、現場をリードできる存在だと私は信じています。

皆さんの次回のAPI設計で、この「意味のある選択」が役立つことを願っています。もし迷ったら、まずは「クライアントはこの後どう動くべきか?」を自問自答してみてください。それが正解への最短ルートです。

コメント

タイトルとURLをコピーしました