Query와 Path와 같이 쿠키와 헤더를 설정할 수 있다.
from typing import Optional
from fastapi import Cookie, FastAPI
app = FastAPI()
@app.get("/items/")
async def read_items(ads_id: Optional[str] = Cookie(None)):
return {"ads_id": ads_id}
Cookie
는 Path
와 Query
의 형제 Class이며 Param
클래스를 똑같이 상속받는다. 이 말은 Cookie
또한 함수라는 것!
Cookie 설정한 것과 똑같이 하면 된다. 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}
하지만 Header에서 특별한 점은 대문자를 자동으로 소문자화 하고, 하이픈(-)을 자동으로 언더바(_)로 변환한다는 것이다.
Request Header에는 user-agent 처럼 헤더명이 -으로 이어져있다. 하지만 이는 파이썬에서는 허용되지 않은 변수 이름이며, Fast API는 이를 _로 snake case로 자동으로 변환을 해준다.
이러한 옵션을 사용하지 않으려면 아래와 같이 작성하면 된다.
@app.get("/items/")
async def read_items(
strange_header: Optional[str] = Header(None, convert_underscores=False)
):
return {"strange_header": strange_header}
헤더에 중복된 내용이 있다면, 이는 1개의 헤더에 여러개 value가 있다는 것이다.
X-Token: foo
X-Token: bar
그렇다면 해당 value들을 받기 위해 List로 설정하면 된다.
@app.get("/items/")
async def read_items(x_token: Optional[List[str]] = Header(None)):
return {"X-Token values": x_token}
결과 값은 아래처럼 나오게 된다.
{
"X-Token values": [
"bar",
"foo"
]
}