レスポンスヘッダー¶
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-プレフィックスを使用して追加できることに注意してください。
ただし、ブラウザのクライアントが確認できるようにしたいカスタムヘッダーがある場合は、StarletteのCORSドキュメントに記載されているexpose_headersパラメーターを使用して、CORS設定(CORS(クロスオリジンリソース共有)で詳細を読む)に追加する必要があります。