ヘッダーパラメーター¶
Query
、Path
、Cookie
パラメーターと同じ方法でヘッダーパラメーターを定義できます。
Header
のインポート¶
最初にHeader
をインポートします
from typing import Annotated
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: Annotated[str | None, Header()] = None):
return {"User-Agent": user_agent}
from typing import Annotated, Union
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: Annotated[Union[str, None], Header()] = None):
return {"User-Agent": user_agent}
from typing import Union
from fastapi import FastAPI, Header
from typing_extensions import Annotated
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: Annotated[Union[str, None], Header()] = None):
return {"User-Agent": user_agent}
ヒント
可能であれば、Annotated
バージョンを使用することをお勧めします。
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: str | None = Header(default=None)):
return {"User-Agent": user_agent}
ヒント
可能であれば、Annotated
バージョンを使用することをお勧めします。
from typing import Union
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: Union[str, None] = Header(default=None)):
return {"User-Agent": user_agent}
Header
パラメーターの宣言¶
次に、Path
、Query
、Cookie
と同じ構造を使用してヘッダーパラメーターを宣言します。
デフォルト値と、すべての追加の検証またはアノテーションパラメーターを定義できます。
from typing import Annotated
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: Annotated[str | None, Header()] = None):
return {"User-Agent": user_agent}
from typing import Annotated, Union
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: Annotated[Union[str, None], Header()] = None):
return {"User-Agent": user_agent}
from typing import Union
from fastapi import FastAPI, Header
from typing_extensions import Annotated
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: Annotated[Union[str, None], Header()] = None):
return {"User-Agent": user_agent}
ヒント
可能であれば、Annotated
バージョンを使用することをお勧めします。
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: str | None = Header(default=None)):
return {"User-Agent": user_agent}
ヒント
可能であれば、Annotated
バージョンを使用することをお勧めします。
from typing import Union
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: Union[str, None] = Header(default=None)):
return {"User-Agent": user_agent}
「技術的な詳細」
Header
は、Path
、Query
、Cookie
の「姉妹」クラスです。また、同じ共通のParam
クラスを継承しています。
しかし、Query
、Path
、Header
などをfastapi
からインポートすると、それらは実際には特別なクラスを返す関数であることを忘れないでください。
情報
ヘッダーを宣言するには、Header
を使用する必要があります。そうでない場合、パラメーターはクエリパラメーターとして解釈されます。
自動変換¶
Header
は、Path
、Query
、Cookie
が提供するものに加えて、少し追加の機能を持っています。
ほとんどの標準ヘッダーは、「ハイフン」文字(「マイナス記号」とも呼ばれる)(-
)で区切られています。
しかし、user-agent
のような変数はPythonでは無効です。
そのため、デフォルトでは、Header
はパラメーター名の文字をアンダースコア(_
)からハイフン(-
)に変換して、ヘッダーを抽出および文書化します。
また、HTTPヘッダーは大文字と小文字を区別しないため、標準的なPythonスタイル(「snake_case」とも呼ばれます)で宣言できます。
そのため、User_Agent
などにする必要がなく、Pythonコードで通常どおりuser_agent
を使用できます。
何らかの理由で、アンダースコアをハイフンに自動変換する機能を無効にする必要がある場合は、Header
のconvert_underscores
パラメーターをFalse
に設定します。
from typing import Annotated
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(
strange_header: Annotated[str | None, Header(convert_underscores=False)] = None,
):
return {"strange_header": strange_header}
from typing import Annotated, Union
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(
strange_header: Annotated[
Union[str, None], Header(convert_underscores=False)
] = None,
):
return {"strange_header": strange_header}
from typing import Union
from fastapi import FastAPI, Header
from typing_extensions import Annotated
app = FastAPI()
@app.get("/items/")
async def read_items(
strange_header: Annotated[
Union[str, None], Header(convert_underscores=False)
] = None,
):
return {"strange_header": strange_header}
ヒント
可能であれば、Annotated
バージョンを使用することをお勧めします。
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(
strange_header: str | None = Header(default=None, convert_underscores=False),
):
return {"strange_header": strange_header}
ヒント
可能であれば、Annotated
バージョンを使用することをお勧めします。
from typing import Union
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(
strange_header: Union[str, None] = Header(default=None, convert_underscores=False),
):
return {"strange_header": strange_header}
警告
convert_underscores
をFalse
に設定する前に、一部のHTTPプロキシとサーバーでは、アンダースコアを含むヘッダーの使用が許可されていないことを考慮してください。
重複するヘッダー¶
重複するヘッダーを受け取る可能性があります。つまり、同じヘッダーに複数の値があるということです。
型宣言でリストを使用して、これらのケースを定義できます。
重複するヘッダーからのすべての値は、Pythonのlist
として受け取られます。
たとえば、複数回出現する可能性のあるX-Token
ヘッダーを宣言するには、次のように記述します。
from typing import Annotated
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(x_token: Annotated[list[str] | None, Header()] = None):
return {"X-Token values": x_token}
from typing import Annotated, List, Union
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(x_token: Annotated[Union[List[str], None], Header()] = None):
return {"X-Token values": x_token}
from typing import List, Union
from fastapi import FastAPI, Header
from typing_extensions import Annotated
app = FastAPI()
@app.get("/items/")
async def read_items(x_token: Annotated[Union[List[str], None], Header()] = None):
return {"X-Token values": x_token}
ヒント
可能であれば、Annotated
バージョンを使用することをお勧めします。
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(x_token: list[str] | None = Header(default=None)):
return {"X-Token values": x_token}
ヒント
可能であれば、Annotated
バージョンを使用することをお勧めします。
from typing import Union
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(x_token: Union[list[str], None] = Header(default=None)):
return {"X-Token values": x_token}
ヒント
可能であれば、Annotated
バージョンを使用することをお勧めします。
from typing import List, Union
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(x_token: Union[List[str], None] = Header(default=None)):
return {"X-Token values": x_token}
次の様な2つのHTTPヘッダーを送信して、そのパスオペレーションと通信する場合
X-Token: foo
X-Token: bar
レスポンスは次のようになります。
{
"X-Token values": [
"bar",
"foo"
]
}
まとめ¶
Query
、Path
、Cookie
と同様の一般的なパターンを使用して、Header
でヘッダーを宣言します。
変数内のアンダースコアについては心配する必要はありません。**FastAPI**が変換を処理します。