レスポンスヘッダー¶
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は、開発者の便宜のために、fastapi.responses
として同じstarlette.responses
を提供します。ただし、利用可能なレスポンスのほとんどはStarletteから直接提供されています。
また、Response
はヘッダーとクッキーの設定によく使用されるため、FastAPIはfastapi.Response
でも提供しています。
カスタムヘッダー¶
カスタムのプロプライエタリヘッダーは、「X-」プレフィックスを使用して追加できることに注意してください。
ただし、ブラウザのクライアントが表示できるカスタムヘッダーがある場合は、それらをCORS構成に追加する必要があります(CORS(Cross-Origin Resource Sharing)を参照してください)。StarletteのCORSドキュメントに記載されているexpose_headers
パラメータを使用します。