コンテンツへスキップ

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

デフォルトのレスポンスステータスコードを設定できることはすでにご存知でしょう。

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

ユースケース

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

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

それでも、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パラメータを宣言し、それらのステータスコードを設定することもできます。ただし、最後に設定されたものが優先されることに注意してください。