レスポンス - ステータスコードの変更¶
デフォルトのレスポンスステータスコードを設定できることはすでにご存知でしょう。
しかし、場合によっては、デフォルトとは異なるステータスコードを返す必要があります。
ユースケース¶
たとえば、デフォルトで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
パラメータを宣言し、それらのステータスコードを設定することもできます。ただし、最後に設定されたものが優先されることに注意してください。