https://fastapi.tiangolo.com/tutorial/header-params/
Header Parameters - FastAPI
You can define Header parameters the same way you define Query, Path and Cookie parameters. First import Header: Python 3.10+Python 3.9+Python 3.6+Python 3.10+ non-AnnotatedPython 3.6+ non-Annotated from typing import Annotated from fastapi import FastAPI,
fastapi.tiangolo.com
<FastAPI 공식문서 참조>
*Query, Path, Cookie parameter를 정의한 방식과 동일하게 Header parameter를 정의 가능하다.
1. Import Header
Header library를 import 하자.
from fastapi import FastAPI, Header
1-1. Declare Header parameter
헤더 매개변수 역시 Annotated를 이용해 편하게 선언 가능하다.
* Annotated는 python 3.9+ 에서 이용가능,
* 아래처럼 Union없이 선언하는 것은 python 3.10+ 이상에서만 가능
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}
2. Automatic conversion
다른 것과는 다르게 Header 자료는 추가 기능을 제공한다.
바로 자동 형변환인다. 대부분의 표준 헤더는 "hyphen", "-" 기호로 구분이 되는데, 이는 파이썬에서 유효하지 않다.
따라서 Header 는 기본적으로 매개변수 이름을 언더스코어( _ )를 포함한 str에서 하이픈( - ) 로 변환해 헤더를 추출하고 기록해야 할 것이다.
또한 HTML 헤더는 대소문자를 구분하지 않으므로, snake_case인 standard python style로 선언 가능하다.
따라서 헤더 선언 시 User_Agent 처럼 첫 문자를 대문자화 할 필요가 없고, python code 처럼 user_agent 로 사용한다.
이러한 기능은 on-off 가능하며, Header 의 convert_underscores 를 False 로 설정하면 된다.
아래처럼 말이다.
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 프록시와 서버들은 ( _ )가 포함된 헤더 형식을 허용하지 않는다는 점을 명심해야 한다.
3. Duplicate headers
*헤더 중복사용.
Python list 를 사용해 여러 헤더를 한 번에 받을 수 있다.
@app.get("/items/")
async def read_items(x_token: Annotated[list[str] | None, Header()] = None):
return {"X-Token values": x_token}
x_token을 Header형 list로 받았다.
이때 path operation은 아래같은 두 개의 HTTP header를 송신한다.
X-Token: foo
X-Token: bar
이에 대한 응답은 다음과 같다.
{
"X-Token values": [
"bar",
"foo"
]
}
4. Reference
'프레임워크 > FastAPI' 카테고리의 다른 글
[FastAPI] FastAPI [14] Response model - Return Type (0) | 2023.04.25 |
---|---|
[FastAPI] FastAPI [13] Response status code (0) | 2023.04.18 |
[FastAPI] FastAPI [11] Cookie Parameters (0) | 2023.04.04 |
[FastAPI] FastAPI [10] Extra Data Types (0) | 2023.04.03 |
[FastAPI] FastAPI [9] Declare Request Example Data (0) | 2023.04.03 |