ウェブ開発、API、またはサーバー通信に足を踏み入れるなら、HTTPステータスコードは日々の生活の一部となるでしょう。よく遭遇するHTTPレスポンスステータスコードの1つに「201 Created」があります。これは一見すると分かりやすいかもしれませんが、その意味、適切な使用法、および影響を理解することは、クリーンで信頼性の高いAPIとウェブアプリケーションを構築する上で大きな違いを生み出します。
このブログ記事では、201 Createdステータスコードとは何か、なぜそれが重要なのか、どのように正しく使用するか、そしてそれを取り巻くAPI設計のベストプラクティスについて探ります。APIを構築またはテストしている場合、201 Created
のようなレスポンスを検証するには強力なAPIプラットフォームが必要です。そこで登場するのがApidogです。無料で始められるAPIテストプラットフォームであるApidogを使えば、APIをリアルタイムで設計、モック、テスト、デバッグ、ドキュメント化できます。また、201 Createdを含むAPIワークフローを検証し、自動化することで、より高い信頼性と迅速なリリースを実現できます。そして最高の点は、Apidogを無料でダウンロードして、今日からステータスコードの実験を始められることです。
それでは、HTTP 201 Createdステータスコードの目的、メカニズム、ベストプラクティスを探っていきましょう。
「成功」のその先へ:HTTPステータスコードのセマンティクス
HTTPステータスコードはクラスに分類されます。最も有名なのは、成功を示す2xxクラスです。しかし、成功の中にも異なる種類があります。
200 OK
: 一般的な「成功」コード。成功したGET
、PUT
、あるいはPOST
リクエストに使用できます。「リクエストは成功しました」という意味ですが、どのような種類の成功かは特定しません。201 Created
: リクエストが成功し、その結果として新しいリソースが作成されたことを具体的に示します。これはほとんどの場合、POST
リクエスト(および場合によってはPUT
リクエスト)への応答として使用されます。202 Accepted
: リクエストは処理のために受け入れられましたが、処理はまだ完了していません。これは非同期操作に使用されます。204 No Content
: リクエストは成功しましたが、レスポンスボディで返すコンテンツがありません。DELETE
操作に最適です。
201 Created
の美しさはその具体性です。曖昧さをすべて排除します。201
を受け取ったクライアントアプリケーションは、新しいリソースがサーバー上に存在することを100%確信できます。
HTTPステータスコード201 Createdとは?
HTTP 201 Createdステータスコードは、2xx Successファミリーの一部であり、以下のことを示します。
「リクエストは正常に完了し、新しいリソースの作成に成功しました。」
これは以下のことを示します。
- リクエストが成功したこと。
- その結果として新しいリソースが作成されたこと。
- サーバーが、新しく作成されたリソースに関する情報を、多くの場合レスポンスボディまたはヘッダーで返すこと。
簡単に言えば、クライアントが新しいユーザー、投稿、注文、ファイルなどの作成をサーバーに要求し(通常はPOSTまたはPUT)、サーバーがこの201レスポンスで作成が成功したことを確認します。
201は通常いつ返されますか?
最も一般的なシナリオは、サーバー上に新しいものを作成するPOSTリクエストです。
- 新しいユーザーアカウントの登録。
- Eコマースカタログへの商品の追加。
- ドキュメントやメディアファイルのアップロード。
- 新しいブログ記事やコメントの作成。
これらの場合、サーバーは201 Createdステータスとともに、新しいリソースの詳細(多くの場合、その一意の識別子またはURLを含む)を返します。
APIにとって201 Createdの使用が重要な理由
201ステータスコードを適切に使用することは、API開発者とユーザーにとって以下の点でメリットがあります。
- 成功とリソース作成を明確に伝え、曖昧さを避けます。
- Locationヘッダーは、クライアントが新しいリソースをすぐに取得したりリンクしたりするのに役立ちます。
- RESTfulなベストプラクティスとHTTP標準に準拠し、APIを予測可能にします。
- クライアントとサーバー間のやり取りの明確さを向上させ、エラーを起こしやすい推測を減らします。
完璧な201 Createdレスポンスの構造
201
レスポンスは、単にステータスコードだけではありません。それはパッケージ取引です。真に適切に作成された201
レスポンスには、3つの主要なコンポーネントが含まれています。
1. ステータスコード
最初で最も重要な部分は、ステータスラインそのものです。
HTTP/1.1 201 Created
これは直ちにクライアントの期待を設定します。
2. Locationヘッダー(最も重要な部分)
これは201
レスポンスの目玉です。Location
ヘッダーには、新しく作成されたリソースのURLが含まれている必要があります。
Location: /users/12345
または、より良いのは完全修飾URLです。
Location: <https://api.example.com/v1/users/12345>
なぜこれがそれほど重要なのでしょうか?クライアントは何かを作成したばかりですが、それがどこにあるのか知らないかもしれません。Location
ヘッダーは決定的なパスを提供します。クライアントは、そのリソースに対する後続のすべてのGET
、PUT
、またはDELETE
リクエストにこのURLを使用できます。これは、新しいリソースのアドレスが記載された「領収書」です。
3. レスポンスボディ
厳密には必須ではありませんが、新しく作成されたリソースの表現をレスポンスボディに含めることは、非常に強力な慣習でありベストプラクティスです。
クライアントがデータを作成するために送信したばかりなのに、なぜリソースを返すのでしょうか?いくつかの理由があります。
- サーバーがデータを追加する:サーバーは、クライアントが提供しなかった情報(一意の
id
、createdAt
およびupdatedAt
タイムスタンプ、計算されたフィールドなど)をほとんど常に加えます。 - 確認:リソースがサーバーが意図する表現とまったく同じように保存されたことの確認として機能します。
- 効率:クライアントが完全なデータを取得するために、
Location
URLへの即座の追加のGET
リクエストを行う手間を省きます。
典型的なレスポンスボディは、新しいリソースのJSON表現になります。
{
"id": 12345,
"username": "johndoe",
"email": "john.doe@example.com",
"created_at": "2025-9-9T10:00:00Z",
"updated_at": "2025-9-9T10:00:00Z"
}
201を正しく使用するメリット
- 明確さ:クライアントは何が起こったのかを正確に知ることができます。
- 予測可能性:一貫性のあるAPI設計は、開発者エクスペリエンスの向上につながります。
- REST準拠:API標準のベストプラクティスに準拠します。
- クライアントの効率向上:クライアントは追加の呼び出しなしにリソースをすぐに使用できます。
201 Createdの例示シナリオ
いくつかの実用的な例を見てみましょう。
例1:新しいユーザーの作成
クライアントリクエスト:
POST /users HTTP/1.1
Host: api.example.com
Content-Type: application/json
{
"name": "Alice",
"email": "alice@example.com"
}
サーバーレスポンス:
HTTP/1.1 201 Created
Location: /users/101
Content-Type: application/json
{
"id": 101,
"name": "Alice",
"email": "alice@example.com"
}
ここで、サーバーは明示的に述べています:「ユーザー101を作成しました。/users/101
で見つけることができます。」
例2:ファイルのアップロード
画像をアップロードする場合:
POST /images
サーバーは以下で応答します:
HTTP/1.1 201 Created
Location: /images/42
これは、あなたのファイルが新しいリソースとして存在することを意味します。
例3:ブログ記事の作成
POST /posts
サーバー:
HTTP/1.1 201 Created
Location: /posts/567
実際の使用例
- ユーザー登録システム:新しいアカウントの作成。
- Eコマースプラットフォーム:新しい商品の追加。
- コンテンツ管理システム:新しい記事の公開。
- クラウドストレージAPI:ファイルのアップロード。
201 Created vs 200 OK vs 204 No Content: 違いは何ですか?
201が他の成功コードとどう異なるかを理解することは不可欠です。
ステータスコード | 意味 | 使用時期 |
---|---|---|
201 Created | 新しいリソースが正常に作成されました | 新しいデータを作成するPOSTまたはPUTリクエスト用 |
200 OK | リクエストはレスポンスデータと共に成功しました | 一般的な成功したGET、POSTなど用 |
204 No Content | リクエストは成功しましたが、レスポンスボディがありません | データが返されない成功したリクエスト用 |
201は新しいリソースの作成を意味し、200は一般的な成功を意味し、204は成功したが意図的にレスポンスコンテンツがないことを意味します。迷った場合は、後で新しいURLを指し示すことができるなら、201
を使用してください。
201 Createdを使用する時期:完璧な適合
201 Created
ステータスコードは、主に1つのシナリオで使用する必要があります。
新しいリソースの作成に成功したPOST
リクエストへの応答として。
いくつかの典型的な例を見てみましょう。
- ユーザー登録:
POST /users
-> 新しいユーザーを作成します。レスポンス:201 Created
。 - データベースへのアイテム追加:
POST /articles
-> 新しいブログ記事を作成します。レスポンス:201 Created
。 - ファイルのアップロード:
POST /uploads
-> サーバー上に新しいファイルリソースを作成します。レスポンス:201 Created
。 - 注文の確定:
POST /orders
-> 新しい販売注文を作成します。レスポンス:201 Created
。
それぞれの場合において、クライアントのアクションは直接的で明確な結果をもたらします。新しい、アクセス可能なリソースがユニークなURLに存在することになります。
異なる言語での201 Createdの実装方法
Node.js (Express)
app.post('/users', (req, res) => {
const newUser = { id: 101, ...req.body };
res.status(201).location(`/users/${newUser.id}`).json(newUser);
});
Python (Flask)
from flask import Flask, jsonify, request, make_response
app = Flask(__name__)
@app.route('/users', methods=['POST'])
def create_user():
data = request.get_json()
new_user = {"id": 101, **data}
response = make_response(jsonify(new_user), 201)
response.headers['Location'] = f"/users/{new_user['id']}"
return response
Java (Spring Boot)
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
user.setId(101L);
return ResponseEntity
.created(URI.create("/users/" + user.getId()))
.body(user);
}
アプリケーションで201 Createdを処理する方法
- 新しいリソースデータを処理する前に201ステータスを確認します。
- 返されたLocation URLを使用して、最新のリソース状態を取得します。
- 繰り返しPOST呼び出しが重複するリソースを作成しないように、冪等性を実装します。
- APIの作成ボリュームを理解するために、201レスポンスをログに記録し、監視します。
よくある間違いと悪い習慣
経験豊富な開発者でもこれを間違えることがあります。避けるべきことは次のとおりです。
- 作成に対して200 OKを返すこと:これは最も一般的な間違いです。間違いではありませんが、HTTPのセマンティクスを完全に活用できず、精度が低くなります。
- Locationヘッダーなしで201を返すこと:これはAPI設計の重大な過ちです。Locationヘッダーなしの
201
は、配達員が「荷物が配達されました!」と告げながら、どこに置いたかを教えることを拒否するようなものです。 - GETリクエストに対して201を返すこと:
GET
リクエストはリソースを作成してはなりません。それらは取得専用です。GET
は200 OK
(見つかった場合)または404 Not Found
を返す必要があります。 - 空のボディを返すこと:技術的には許可されていますが、APIコンシューマーにとってはユーザーエクスペリエンスが悪いです。これにより、即座に追加のリクエストを行うことを余儀なくされます。
Apidogで201レスポンスをテストする方法

ここで理論から実践へと移行することが不可欠になります。APIエンドポイントが常に正しい201
レスポンスを返していることを確認したいはずです。Apidogは、この作業に最適なツールです。
Apidogを使えば、次のことができます。
- リクエストの作成:正しいJSONボディを使用して、作成エンドポイントへの
POST
リクエストを簡単に設定できます。 - 送信と検証:ワンクリックでリクエストを送信し、完全なレスポンスを即座に確認できます。
- 詳細の検査:Apidogはステータスコード(
201
)とすべてのヘッダーを明確に表示します(Location
ヘッダーが存在し、正しいことを確認できます)。 - ボディの検証:レスポンスボディに、
id
などのサーバー生成フィールドを含む、新しいリソースの期待される表現が含まれていることを簡単に確認できます。 - テストの自動化:Apidogでテストスイートを作成し、
/users
へのPOST
が201
ステータスとLocation
ヘッダーを返すことを自動的にアサートすることで、APIが後退しないことを保証できます。
このレベルのテストは、開発者が喜んで使用するプロフェッショナルで信頼性の高いAPIを構築するために不可欠です。これにより、開発が加速され、最初からAPIへの信頼が育まれます。推測するのではなく、APIの正確な動作をリアルタイムで確認できます。
他の2xx成功コードとの比較
- 200 OK:成功(一般的)。
- 201 Created:新しいリソースが作成されました。
- 202 Accepted:リクエストは受け入れられましたが、処理が進行中です。
- 204 No Content:成功しましたが、ボディは返されません。
それぞれに明確な役割があり、それらを正しく使用することでAPIの信頼性が向上します。
高度なシナリオ:非同期作成と202 Accepted
リソースの作成が即座に行われない場合はどうでしょうか?たとえば、POST /users
リクエストがウェルカムメール、請求プロセス、および数秒かかるデータ同期をトリガーする必要がある場合、リソースがまだ完全に作成されていないため、201
レスポンスは誤解を招く可能性があります。
この場合、より適切なステータスコードは202 Accepted
かもしれません。
202 Accepted
は、「リクエストを受け取り、処理のために承認しました。最終的に作成につながることもあれば、つながらないこともあります。」という意味です。- レスポンスには通常、クライアントが後でリクエストのステータスを確認できるURLが含まれます(例:
Location: /queue/job-123
)。
同期的な即時作成には201
を使用します。非同期的な遅延処理には202
を使用します。
201 Createdを返すためのベストプラクティス
- 常に新しいリソースを指すLocationヘッダーを含めます。
- 可能であれば、ボディにリソースの表現を返します。
- 明確にし、200と201の間の曖昧さを避けます。
- APIエンドポイント全体で一貫して使用します。
正しいステータスコードのSEOおよびUX上のメリット
ステータスコードがSEOやユーザーエクスペリエンスと関連しているとは考えないかもしれませんが、実際には関連しています。
- 検索エンジンはステータスコードを使用してサイトの動作を理解します。
201 Created
の正しい使用は、動的コンテンツの正確なクロールを保証します。- ユーザーは、より高速で予測可能なAPIから間接的に利益を得ます。
結論:適切に設計されたAPIの証
HTTP 201 Created
ステータスコードは、単なる数字以上のものです。それは明確さと優れた設計へのコミットメントです。これは、API設計者として、開発者エクスペリエンスを重視し、HTTPプロトコルの全機能を活用していることを示します。
それは単なる成功メッセージではありません。サーバーが「あなたが要求したものを構築しました。そして、ここがそれを見つける場所です。」と言っているのです。
201を適切に使用することで、より明確で信頼性が高く、使いやすいAPIを設計できます。
Location
ヘッダーと新しいリソースの表現を含む201
レスポンスを一貫して提供することで、APIは予測可能で自己記述的になり、統合が容易になります。これは、アマチュア的なAPIとプロフェッショナルで本番環境に対応したAPIを区別する小さな詳細です。
ですから、次にPOST
エンドポイントを構築するときは、単に200 OK
で満足しないでください。具体的に。役に立つように。201 Created
を返し、クライアントにふさわしい明確な「領収書」を提供してください。そして、これを実際にテストしたいのであれば、Apidog以外に探す必要はありません。Apidogを使えば、リクエストを作成し、レスポンスを検証し、APIが正しい201 Createdレスポンスを返すことを確認できます。これにより、すべてのAPIインタラクションで常に正しく動作し、信頼と確信を築くことができます。
読むだけでなく、今すぐApidogを無料でダウンロードしてテストを始めましょう!