FastAPI 공식문서 따라하기[15] - Header Parameters
https://fastapi.tiangolo.com/tutorial/header-params/ 공식문서 따라하는 글
☑️ Header Parameters
앞에서 QueryParameter
, PathParameter
, Cookie
를 설정해준것처럼 Header
를 설정할 수 있다.
☑️ Import Header
사용하기 위해선 fastapi
에서 Header
를 임포트 해야한다.
1
2
3
4
5
6
7
8
9
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(Host: str | None = Header(default=None)):
return {"Host": Host}
개인적으로 확인할게 있어서 기본 예제를 바꿨다.
기본 예제에는 Host
변수로 인자를 받는게 아니고, user_agent
를 인자로 받는다.
위의 예제의 결과는
1
{"Host":"localhost:8000"}
이렇게 뜨고, user_agent
를 인자로 받는다면
1
{"user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36"}
이렇게 내 정보가 뜬다.
Header
는Path
,Query
,Cookie
처럼Param
클래스를 상속받았다고 한다.
하지만 리턴하는 값은 모두 다 같은 값이 아니라는 사실을 알고 있어야 한다.
☑️ Automatic conversion
보통 헤더에는 -
기호로 구분을 한다. user-agent
처럼 말이다. 그러나 이러한 -
값이 포함되어 있으면 Python
에서는 인식하지 못한다.
그렇기에 Header
를 사용하면 -
를 자동으로 _
로 바꿔 인식한다.
또한 HTTPheader
들은 대소문자를 구문하지 않으므로 표준Python
스타일로 선언할 수 있다.
그렇기에 User_Agent
같이 작성할 필요 없고 user_agent
처럼 표준Python
명명규칙을 따를 수 있다.
파이썬 표준에 관해서는 여기를 참고 -> https://digital-play.tistory.com/46
만약 그래도 어떠한 이유때문에 -
를 _
로 바꿔주는 자동 변환 기능을 꺼버리고 싶다면 다음과 같이 convert_underscores
의 값을 False
로 주면 된다.
1
2
3
4
5
6
7
8
9
10
11
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(
strange_header: str | None = Header(default=None, convert_underscores=False)
):
return {"strange_header": strange_header}
☑️ Duplicate headers
같은 헤더에 여러값이 있을때도 이를 받을 수 있다고 한다.
이렇게 받으려면 list
형식으로 인자를 받아야 한다.
예를들면, Kms-Token
이 있다고 하고 이에 여러값을 저장하여 받는다고 할 때
1
2
3
4
5
6
7
8
9
from fastapi import FastAPI, Header
app = FastAPI()
@app.get("/items/")
async def read_items(kms_token: list[str] | None = Header(default=None)):
return {"Kms_Token value": kms_token}
이렇게 작성할 수 있고
1
2
3
4
5
6
curl -X 'GET' \
'http://localhost:8000/items/' \
-H 'accept: application/json' \
-H 'kms-token: hi?' \
-H 'kms-token: token2'
이렇게 요청을 보내 값을 확인할 수 있다.