api만들다 보면 path, query, body 말고도 추가적으로 header를 통해 프론트에게서 데이터를 전달받는 경우가 있습니다.
FastAPI에서의 사용법에 대해 알아보겠습니다.
from fastapi import FastAPI, Header
@app.get("/headers/")
def headers(headers_test: Optional[str] = Header(None)):
return {"headers_test": headers_test}
FastAPI에서는 header의 -를 자동으로 _로 변환하게 됩니다.
자동으로 변환하는 이유는 헤더에서 underscore를 기본적으로 인식하지 않기 때문입니다.
기본적으로는 헤더에 underscore를 쓰지 않는 것이 일반적이지만 정말쓰고 싶을 경우 아래와 같이 하면 됩니다.
@app.get("/headers/")
def headers(headers_test: Optional[str] = Header(None, convert_underscores=False)):
return {"headers_test": headers_test}
다만 header에 underscore를 쓰는것은 서버 환경에 따라 안될수도 있으니 쓰지 않는 것을 추천합니다.
응답 데이터를 변환할 수 있습니다. 예를 들어 회원 가입 같은 경우 패스워드를 일반적으로 저장 및 사용자에게 전달하면 안되기 때문에 패스워드빼고 전달하는 등으로 사용가능할꺼 같습니다.
class UserIn(BaseModel):
username: str
password: str
email: str
full_name: Optional[str] = None
class UserOut(BaseModel):
username: str
email: str
full_name: Optional[str] = None
@app.post("/user/", response_model=UserOut)
async def create_user(user: UserIn):
return user
api 확인
swagger 확인
swagger에서도 response_model이 설정이 된 것을 확인할 수 있습니다.