14. Header Parameters
1. Header Parameters
Query
,Path
및Cookie
매개변수를 정의하는 것과 같이 동일한 방식으로Header
매개변수를 정의할 수 있다.
2. Import Header
- 먼저,
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}
3. Declare Header
parameters
- 그런 다음
Path
,Query
및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}
Note
- headers를 선언하려면
Header
를 사용해야 한다. - 그 이유는 매개변수가 query 매개변수로 해석되기 때문이다.
4. Automatic conversion
Header
에는Path
,Query
및Cookie
가 제공하는 것 외에 약간의 추가 기능이 있다.- 대부분의 표준 headers는
-
문자로 구분된다. - 하지만
user-agent
와 같은 변수명은 Python에서 유효하지 않기 때문에 위의 예제처럼 작성해야만 한다. - 이때
Header
는 headers를 추출하고 문서화하기 위해 매개변수명의_
문자를-
문자로 자동 변환한다. - 또한 HTTP headers는 대소문자를 구분하지 않으므로 표준 Python 스타일로 선언할 수 있다.
- 따라서 첫 글자를
User_Agent
처럼 대문자로 표시할 필요 없이 Python 코드에서 평소와 같이user_agent
를 사용할 수 있다.
- 만약 어떠한 이유로
_
문자를-
문자로 자동 변환되는 것을 비활성화해야 하는 경우, 다음과 같이Header
의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}
Note
convert_underscores
를False
로 설정하기 전에 일부 HTTP 프록시 및 서버는_
문자가 있는 headers 사용을 허용하지 않을 수도 있다는 것을 먼저 확인해야 한다.
5. Duplicate headers
- 여러 값을 가진 동일한 중복 headers를 수신할 수 있다.
- 이런 경우 타입을 선언할 때 리스트를 사용하여 정의하면 되는데, 중복 headers의 모든 값을 Python
list
로 받게 된다.
- 다음의 예제는 두 번 이상 나타날 수 있는
X-Token
의 header를 선언하는 예제이다.
from typing import Optional, List
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}
- 해당 path operation과 통신하는 경우 다음과 같이 두 개의 HTTP headers를 전송할 수 있다.
- 전송된 HTTP headers에 대한 response는 다음과 같다.