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