你可以使用定義 Query, Path 和 Cookie 參數(shù)一樣的方法定義 Header 參數(shù)。
首先導(dǎo)入 Header:
from typing import Optional
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: Optional[str] = Header(None)):
return {"User-Agent": user_agent}
然后使用和Path, Query and Cookie 一樣的結(jié)構(gòu)定義 header 參數(shù)
第一個(gè)值是默認(rèn)值,你可以傳遞所有的額外驗(yàn)證或注釋參數(shù):
from typing import Optional
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(user_agent: Optional[str] = Header(None)):
return {"User-Agent": user_agent}
技術(shù)細(xì)節(jié)
Header 是 Path, Query 和 Cookie 的兄弟類型。它也繼承自通用的 Param 類.
但是請(qǐng)記得,當(dāng)你從fastapi導(dǎo)入 Query, Path, Header, 或其他時(shí),實(shí)際上導(dǎo)入的是返回特定類型的函數(shù)。
Info
為了聲明headers, 你需要使用Header, 因?yàn)榉駝t參數(shù)將被解釋為查詢參數(shù)。
Header 在 Path, Query 和 Cookie 提供的功能之上有一點(diǎn)額外的功能。
大多數(shù)標(biāo)準(zhǔn)的headers用 "連字符" 分隔,也稱為 "減號(hào)" (-)。
但是像 user-agent 這樣的變量在Python中是無效的。
因此, 默認(rèn)情況下, Header 將把參數(shù)名稱的字符從下劃線 (_) 轉(zhuǎn)換為連字符 (-) 來提取并記錄 headers.
同時(shí),HTTP headers 是大小寫不敏感的,因此,因此可以使用標(biāo)準(zhǔn)Python樣式(也稱為 "snake_case")聲明它們。
因此,您可以像通常在Python代碼中那樣使用 user_agent ,而不需要將首字母大寫為 User_Agent 或類似的東西。
如果出于某些原因,你需要禁用下劃線到連字符的自動(dòng)轉(zhuǎn)換,設(shè)置Header的參數(shù) convert_underscores 為 False:
from typing import Optional
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(
strange_header: Optional[str] = Header(None, convert_underscores=False)
):
return {"strange_header": strange_header}
Warning
在設(shè)置 convert_underscores 為 False 之前,請(qǐng)記住,一些HTTP代理和服務(wù)器不允許使用帶有下劃線的headers。
有可能收到重復(fù)的headers。這意味著,相同的header具有多個(gè)值。
您可以在類型聲明中使用一個(gè)list來定義這些情況。
你可以通過一個(gè)Python list 的形式獲得重復(fù)header的所有值。
比如, 為了聲明一個(gè) X-Token header 可以出現(xiàn)多次,你可以這樣寫:
from typing import List, Optional
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(x_token: Optional[List[str]] = Header(None)):
return {"X-Token values": x_token}
如果你與路徑操作通信時(shí)發(fā)送兩個(gè)HTTP headers,就像:
X-Token: foo
X-Token: bar
響應(yīng)會(huì)是:
{
"X-Token values": [
"bar",
"foo"
]
}
使用 Header 來聲明 header , 使用和 Query, Path 與 Cookie 相同的模式。
不用擔(dān)心變量中的下劃線,F(xiàn)astAPI 會(huì)負(fù)責(zé)轉(zhuǎn)換它們。
更多建議: