コンテンツへスキップ

レスポンス - ステータスコードの変更

デフォルトのレスポンスステータスコードを設定できることは、おそらく以前に読んだことがあるでしょう。

しかし、場合によっては、デフォルトとは異なるステータスコードを返す必要があります。

ユースケース

例えば、デフォルトで "OK" 200 の HTTP ステータスコードを返したいとします。

しかし、データが存在しない場合は、それを作成し、"CREATED" 201 の HTTP ステータスコードを返したいとします。

それでも、response_model を使用して、返すデータをフィルタリングして変換できるようにしたいです。

そのような場合は、Response パラメータを使用できます。

Response パラメータの使用

パス操作関数で、Response 型のパラメータを宣言できます (クッキーやヘッダーの場合と同様です)。

そして、その一時的なレスポンスオブジェクトでstatus_codeを設定できます。

from fastapi import FastAPI, Response, status

app = FastAPI()

tasks = {"foo": "Listen to the Bar Fighters"}


@app.put("/get-or-create-task/{task_id}", status_code=200)
def get_or_create_task(task_id: str, response: Response):
    if task_id not in tasks:
        tasks[task_id] = "This didn't exist before"
        response.status_code = status.HTTP_201_CREATED
    return tasks[task_id]

その後、通常通り(dict、データベースモデルなど)必要なオブジェクトを返すことができます。

そして、response_modelを宣言した場合、返されたオブジェクトをフィルタリングして変換するために引き続き使用されます。

FastAPI は、その一時的なレスポンスを使用してステータスコード (およびクッキーとヘッダー) を抽出し、response_model でフィルタリングされた、返された値を含む最終的なレスポンスにそれらを配置します。

依存関係でResponseパラメータを宣言し、その中でステータスコードを設定することもできます。しかし、最後に設定されたものが優先されることに注意してください。