인프런 커뮤니티 질문&답변

Grid님의 프로필 이미지
Grid

작성한 질문수

실전! FastAPI 입문

(실습) PATCH API - 수정

[질문] api handler 매개변수 정리

해결된 질문

작성

·

278

·

수정됨

0

안녕하세요, 강의 잘 듣고 있습니다.

Fast API에서 api handler 매개변수로

  1. url path parameter

  2. url query parameter

  3. request body

 이렇게 3가지가 올 수 있는 것 같은데, 내부적으로 파이썬 **kwargs를 사용해서 순서에 상관없이 매개변수 이름을 통해서 구분을 하는걸까요?

사실 공식문서를 통해서 직접 찾아서 공부하면 베스트인데, 질문을 통해서 전문가한테 빠르게 배워서 정리하는 것도 좋은 방법같아서 괜찮으시면 관련 내용을 정리해주실 수 있을까요? 특히 강의에서 Pydantic BaseModel을 상속한 클래스를 타입힌트로 하면 내부적으로 request body 매개변수로 알아서 처리하는 건지, 또 Body를 통해서 request body의 인자를 받던데 ...이랑 embed=True의 의미 등 이런 부분들도 강의에서 설명이 따로 없어서 정리해주시면 도움이 될 것 같습니다.

감사합니다.

답변 1

0

신동현님의 프로필 이미지
신동현
지식공유자

안녕하세요. 해당 부분에 대한 설명이 부족했네요.
api handler 함수에 전달된 매개변수들은 다음과 같은 기준으로 FastAPI에 의해 처리됩니다.

  1. Path parameter
    path parameter는 path에 사용된 것과 동일한 이름의 매개변수를 전달하는 경우, path parameter로 처리됩니다.

    @router.get("/{todo_id}", status_code=200)
    def get_todo_handler(todo_id: int):
        pass
  2. Request body
    Pydantic의 BaseModel을 상속받아 생성한 클래스를 type hints로 지정해주는 경우에는 request body로 처리됩니다.

    @router.post("", status_code=201)
    def create_todo_handler(request: CreateToDoRequest):
        pass

    그런데 request body로 전달 받는 인자가 하나인 경우에는 굳이 별도의 class를 생성할 필요가 없기 때문에 아래와 같은 syntactic sugar를 이용할 수 있습니다.

    @router.patch("/{todo_id}", status_code=200)
    def update_todo_handler(is_done: bool = Body(..., embed=True)):
        pass
  3. Query paremeter

    그 외의 parameter는 기본적으로 query parameter로 처리됩니다.

    @router.get("", status_code=200)
    def get_todos_handler(order: str | None = None):
        pass
Grid님의 프로필 이미지
Grid
질문자

답변 감사합니다!

Grid님의 프로필 이미지
Grid

작성한 질문수

질문하기