コンテンツへスキップ

レスポンスヘッダー

Response パラメータの使用

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

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

from fastapi import FastAPI, Response

app = FastAPI()


@app.get("/headers-and-object/")
def get_headers(response: Response):
    response.headers["X-Cat-Dog"] = "alone in the world"
    return {"message": "Hello World"}

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

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

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

依存関係でResponseパラメータを宣言し、そこにヘッダー(およびクッキー)を設定することもできます。

Response を直接返す

Response を直接返す際にもヘッダーを追加できます。

レスポンスを直接返すで説明されているようにレスポンスを作成し、追加のパラメータとしてヘッダーを渡します。

from fastapi import FastAPI
from fastapi.responses import JSONResponse

app = FastAPI()


@app.get("/headers/")
def get_headers():
    content = {"message": "Hello World"}
    headers = {"X-Cat-Dog": "alone in the world", "Content-Language": "en-US"}
    return JSONResponse(content=content, headers=headers)

技術的な詳細

また、from starlette.responses import Response または from starlette.responses import JSONResponse を使用することもできます。

FastAPI は、開発者の方々の便宜のために、starlette.responses と同じものを fastapi.responses として提供しています。しかし、利用可能なレスポンスのほとんどは Starlette から直接来ています。

そして、Responseはヘッダーやクッキーを設定するためによく使用されるため、FastAPIfastapi.Responseでもそれを提供しています。

カスタムヘッダー

カスタムの独自のヘッダーは、「X-」プレフィックスを使用して追加できることに注意してください。

ただし、ブラウザのクライアントに見せたいカスタムヘッダーがある場合は、CORS設定に追加する必要があります(詳細については、CORS(クロスオリジンリソース共有)を参照し、StarletteのCORSドキュメントに記載されているexpose_headersパラメータを使用してください)。