Header Parameters
定义 Header 参数也和定义 Query
等相同
例子
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(*, user_agent: str = Header(None)):
return {"User-Agent": user_agent}
技术细节:
Header
是Path
,Query
等的姐妹类,他也继承于Param
类- 一样是返回同名类的函数
注:声明 Header 参数必须显示使用 Header
Automatic conversion
Header
在 Path
等的基础上有一些额外的功能
大多数的标准头由连字符 -
分割,但在 python
中是不合法的变量名,例如 user-agent
因此,Header
会将 python 变量名的下划线 _
,自动转化为连字符 -
由于 HTTP 请求头是不区分大小写,因此可以用 python 标准风格 snake_case
来声明它们,即 User-Agent
可以用 user_agent
来声明,而不必 User_Agent
如果因为某些原因要禁用自动转换,可以设置参数 convert_underscores
为 False
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(*, strange_header: str = Header(None, convert_underscores=False)):
return {"strange_header": strange_header}
注:在将 convert_underscores
设置为 False
之前,必须明确一些 http 代理或者服务器不允许使用带有下划线的 headers
Duplicate header
有可能会接收到重复的 headers,即,具有不同值的相同 headers
可以用 list
类型来定义
将会从重复的 headers 接收到值
例如,声明 X-TOKEN
header 可以出现多次
from typing import List
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(x_token: List[str] = Header(None)):
return {"X-Token values": x_token}
如果 HTTP header 如下
X-Token: foo
X-Token: bar
则返回
{
"X-Token values": [
"bar",
"foo"
]
}