Skip to content

14. Header Parameters


1. Header Parameters

  • Query, PathCookie 매개변수를 정의하는 것과 같이 동일한 방식으로 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, QueryCookie와 동일한 구조를 사용하여 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, QueryCookie가 제공하는 것 외에 약간의 추가 기능이 있다.
  • 대부분의 표준 headers는 - 문자로 구분된다.
  • 하지만 user-agent와 같은 변수명은 Python에서 유효하지 않기 때문에 위의 예제처럼 작성해야만 한다.
  • 이때 Header는 headers를 추출하고 문서화하기 위해 매개변수명의 _ 문자를 - 문자로 자동 변환한다.
  • 또한 HTTP headers는 대소문자를 구분하지 않으므로 표준 Python 스타일로 선언할 수 있다.
  • 따라서 첫 글자를 User_Agent처럼 대문자로 표시할 필요 없이 Python 코드에서 평소와 같이 user_agent를 사용할 수 있다.


  • 만약 어떠한 이유로 _ 문자를 - 문자로 자동 변환되는 것을 비활성화해야 하는 경우, 다음과 같이 Headerconvert_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_underscoresFalse로 설정하기 전에 일부 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를 전송할 수 있다.


X-Token: foo
X-Token: bar


  • 전송된 HTTP headers에 대한 response는 다음과 같다.


{
  "X-Token values": ["bar", "foo"]
}

References