[HTTPステータスコード] “201 Created”の意味と使用方法

HTTPステータスコード 201 Created は、クライアントのリクエストが成功し、新しいリソースが作成されたことを示します。

このコードは主に、POSTリクエストが成功した際に使用されます。

例えば、ウェブアプリケーションで新しいユーザーアカウントを作成した場合や、データベースに新しいエントリを追加した場合に返されます。

レスポンスには通常、作成されたリソースのURIが含まれ、Locationヘッダーで提供されることが一般的です。

これにより、クライアントは新しいリソースの場所を知ることができます。

この記事でわかること
  • 201 Createdの意味と使用される場面
  • POSTおよびPUTリクエストでの201 Createdの使用方法
  • 他のステータスコードとの違いと比較
  • WebアプリケーションやAPI開発での実装例
  • 201 Createdを使用する際の利点と注意点

目次から探す

201 Createdの概要

201 Createdの意味

HTTPステータスコード 201 Created は、クライアントからのリクエストが成功し、新しいリソースが作成されたことを示します。

このステータスコードは、主にPOSTリクエストに対するレスポンスとして使用されます。

新しく作成されたリソースのURI(Uniform Resource Identifier)は、レスポンスのLocationヘッダーに含まれることが一般的です。

これにより、クライアントは新しいリソースの場所を知ることができます。

201 Createdが使用される場面

201 Createdは、以下のような場面で使用されます。

スクロールできます
使用場面説明
データベースへの新規レコード追加クライアントがサーバーに新しいデータを送信し、データベースに新しいレコードが作成された場合に使用されます。
ファイルのアップロードクライアントがサーバーにファイルをアップロードし、そのファイルがサーバー上に新しく保存された場合に使用されます。
新しいリソースの生成APIを通じて新しいリソースが生成された場合、例えば新しいユーザーアカウントの作成などに使用されます。

このように、201 Createdは新しいリソースの作成が成功したことを明示的に示すために使用され、クライアントに対して新しいリソースの場所を通知する役割も果たします。

201 Createdの使用方法

POSTリクエストでの使用

201 Createdは、主にPOSTリクエストに対するレスポンスとして使用されます。

POSTリクエストは、サーバーに新しいリソースを作成するためのデータを送信する際に使用されます。

例えば、ユーザー登録フォームを送信した際に、新しいユーザーアカウントが作成されると、サーバーは201 Createdを返します。

# 新しいユーザーを作成する関数
def create_user(data):
    # ユーザーをデータベースに追加
    # 成功した場合、201 Createdを返す
    return 201, "Created"

PUTリクエストでの使用

PUTリクエストは、指定されたリソースを作成または更新するために使用されます。

リソースが存在しない場合、新しく作成されるため、201 Createdが返されることがあります。

ただし、リソースが既に存在し、更新が行われた場合は、通常200 OKが返されます。

# リソースを作成または更新する関数
def update_or_create_resource(resource_id, data):
    if not resource_exists(resource_id):
        # リソースが存在しない場合、新規作成
        return 201, "Created"
    else:
        # リソースが存在する場合、更新
        return 200, "OK"

レスポンスヘッダーのLocationの役割

201 Createdが返される際、レスポンスヘッダーのLocationフィールドには、新しく作成されたリソースのURIが含まれることが一般的です。

これにより、クライアントは新しいリソースの場所を知ることができ、必要に応じてそのリソースにアクセスすることができます。

HTTP/1.1 201 Created
Location: /new-resource/12345

このLocationヘッダーは、クライアントが新しいリソースを参照するための重要な情報を提供し、後続の操作を容易にします。

201 Createdと他のステータスコードの比較

200 OKとの違い

200 OKは、リクエストが成功し、サーバーがリクエストに対する適切なレスポンスを返したことを示します。

通常、GETリクエストに対するレスポンスとして使用され、リソースの取得が成功したことを示します。

一方、201 Createdは、新しいリソースが作成されたことを示すため、主にPOSTリクエストに対して使用されます。

つまり、200 OKは既存のリソースに対する操作の成功を示し、201 Createdは新規リソースの作成を示します。

202 Acceptedとの違い

202 Acceptedは、リクエストが受け入れられたが、処理がまだ完了していないことを示します。

これは、非同期処理が行われる場合に使用され、リクエストの結果がすぐに得られないことを示します。

対照的に、201 Createdはリクエストが成功し、リソースがすでに作成されたことを示します。

したがって、202 Acceptedは処理の完了を保証しないのに対し、201 Createdはリソースの作成が完了したことを保証します。

204 No Contentとの違い

204 No Contentは、リクエストが成功したが、返すべきコンテンツがないことを示します。

これは、リソースの削除や更新が成功したが、特に返すデータがない場合に使用されます。

201 Createdとは異なり、204 No Contentは新しいリソースの作成を示すものではありません。

201 Createdは、新しいリソースが作成され、そのリソースのURIが提供されることを示しますが、204 No Contentは単に操作が成功したことを示すだけで、リソースの作成や変更を伴いません。

201 Createdの実装例

Webアプリケーションでの実装例

Webアプリケーションでは、ユーザーがフォームを通じて新しいデータを送信する際に201 Createdを使用します。

例えば、新しいブログ記事を投稿する機能を考えてみましょう。

ユーザーが記事を投稿すると、サーバーはそのデータを受け取り、データベースに新しい記事を作成します。

その後、サーバーは201 Createdを返し、レスポンスヘッダーのLocationフィールドに新しい記事のURLを含めます。

# 新しいブログ記事を作成する関数
def create_blog_post(data):
    # データベースに記事を追加
    new_post_id = save_to_database(data)
    # 201 Createdと新しい記事のURLを返す
    return 201, {"Location": f"/blog/{new_post_id}"}

API開発での実装例

API開発において、201 Createdは新しいリソースを作成するエンドポイントで使用されます。

例えば、RESTful APIで新しいユーザーを作成するエンドポイントを考えてみます。

クライアントがユーザー情報をPOSTリクエストで送信すると、サーバーはその情報を処理し、新しいユーザーをデータベースに追加します。

成功した場合、サーバーは201 Createdを返し、Locationヘッダーに新しいユーザーのリソースURIを含めます。

# APIで新しいユーザーを作成するエンドポイント
@app.route('/api/users', methods=['POST'])
def create_user():
    user_data = request.json
    new_user_id = add_user_to_db(user_data)
    response = jsonify({"message": "User created"})
    response.status_code = 201
    response.headers['Location'] = f"/api/users/{new_user_id}"
    return response

このように、WebアプリケーションやAPI開発において201 Createdは、新しいリソースの作成が成功したことをクライアントに通知するために重要な役割を果たします。

201 Createdの利点と注意点

201 Createdを使用する利点

  • 明確なリソース作成の通知: 201 Createdは、新しいリソースが正常に作成されたことをクライアントに明確に伝えます。

これにより、クライアントはリクエストが成功したことを確信できます。

  • リソースのURI提供: Locationヘッダーを通じて新しいリソースのURIを提供することで、クライアントはそのリソースに直接アクセスできるようになります。

これにより、後続の操作が容易になります。

  • 標準的なHTTPプロトコルの利用: 201 Createdを使用することで、HTTPプロトコルの標準に従ったレスポンスを提供でき、他の開発者やシステムとの互換性が向上します。

201 Createdを使用する際の注意点

  • Locationヘッダーの設定: 新しいリソースが作成された場合、Locationヘッダーに正しいURIを設定することが重要です。

これがないと、クライアントは新しいリソースの場所を特定できません。

  • リソース作成の確認: 201 Createdを返す前に、リソースが確実に作成されたことを確認する必要があります。

データベースのトランザクションが失敗した場合など、リソースが作成されていないのに201 Createdを返すと、クライアントに誤解を与える可能性があります。

  • 適切な使用シナリオの選択: 201 Createdは、新しいリソースの作成に対してのみ使用すべきです。

リソースの更新や削除には他のステータスコードを使用することが推奨されます。

これらの利点と注意点を理解し、適切に201 Createdを使用することで、より信頼性の高いWebサービスやAPIを構築することができます。

よくある質問

201 CreatedはGETリクエストで使用されますか?

201 Createdは通常、GETリクエストでは使用されません。

GETリクエストは、既存のリソースを取得するために使用されるため、リソースの作成を示す201 Createdは適切ではありません。

201 Createdは、主にPOSTリクエストや場合によってはPUTリクエストで、新しいリソースが作成されたことを示すために使用されます。

201 Createdが返されない場合の原因は?

201 Createdが返されない場合、いくつかの原因が考えられます。

  • リソースの作成が失敗した: データベースのエラーやバリデーションの失敗により、リソースが作成されなかった可能性があります。
  • 不適切なHTTPメソッドの使用: POSTやPUT以外のメソッドでリソース作成を試みた場合、201 Createdは返されません。
  • サーバーの設定ミス: サーバー側の設定やコードに誤りがあり、正しいステータスコードが返されていない可能性があります。

201 CreatedとLocationヘッダーは必須ですか?

201 Createdを返す際にLocationヘッダーを含めることは推奨されますが、必須ではありません。

ただし、Locationヘッダーを含めることで、クライアントに新しく作成されたリソースのURIを提供できるため、後続の操作が容易になります。

Locationヘッダーがない場合、クライアントは新しいリソースの場所を特定するための追加の手順が必要になるかもしれません。

まとめ

この記事では、HTTPステータスコード 201 Created の意味や使用方法、他のステータスコードとの違い、実装例、利点と注意点について詳しく解説しました。

201 Createdは、新しいリソースが正常に作成されたことをクライアントに伝える重要な役割を持ち、特にWebアプリケーションやAPI開発においてその使用が推奨されます。

この記事を通じて得た知識を活用し、実際の開発において適切に201 Createdを活用することで、より信頼性の高いシステムを構築してみてください。

  • URLをコピーしました!
目次から探す