レスポンスヘッダー¶
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
はヘッダーやクッキーを設定するためによく使用されるため、FastAPIはfastapi.Response
でもそれを提供しています。
カスタムヘッダー¶
カスタムの独自のヘッダーは、「X-」プレフィックスを使用して追加できることに注意してください。
ただし、ブラウザのクライアントに見せたいカスタムヘッダーがある場合は、CORS設定に追加する必要があります(詳細については、CORS(クロスオリジンリソース共有)を参照し、StarletteのCORSドキュメントに記載されているexpose_headers
パラメータを使用してください)。