검색
검색
공개 노트 검색
회원가입로그인
FastAPI 마스터하기: 빠르고 효율적인 웹 애플리케이션 개발

5장 – API 구축: 경로, 쿼리, 바디 파라미터

Path, Query, Body 파라미터로 API의 유연함을 만들다

FastAPI의 진정한 강점 중 하나는 다양한 방식으로 클라이언트의 입력을 받아들여, 동적이고 유연한 웹 API를 쉽게 설계할 수 있다는 점입니다. 이 장에서는 반드시 알아야 할 세 가지 입력 방식, 즉 Path, Query, Body 파라미터를 실제 예제와 함께 살펴봅니다.

경로(Path) 파라미터: URL에 의미를 담다

웹 API에서 자주 쓰이는 패턴은 정보의 식별자를 URL 경로에 직접 담는 것입니다. FastAPI에서는 간결한 방식으로 이런 Path 파라미터를 정의할 수 있습니다. 예를 들어 /items/{item_id}라는 경로가 있다면, 함수의 인자에 동일한 변수명을 지정하면 자동으로 값을 전달받습니다.

@app.get("/items/{item_id}")
def read_item(item_id: int):
    return {"item_id": item_id}

타입까지 명확히 지정해주면, 숫자가 아닌 값이 들어올 경우 FastAPI가 알아서 에러를 처리합니다. 덕분에 데이터 검증 부담이 줄고, 오류 가능성이 낮아집니다.

쿼리(Query) 파라미터: 옵션과 검색에 활용하다

Path 파라미터가 경로에 직접 식별자를 담는다면, Query 파라미터는 좀 더 다양한 선택지나 조건, 검색 등에 적합합니다. URL에서 ? 뒤에 붙어 key=value 형태로 여러 개를 붙일 수 있으며, FastAPI에서는 함수의 기본 매개변수 혹은 명시적 Query 선언을 통해 이를 받아들입니다. 예를 들어:

@app.get("/search")
def search_items(keyword: str, page: int = 1):
    return {"keyword": keyword, "page": page}

여기서 page 파라미터처럼 기본값을 지정하면 선택사항이 되고, 명시하지 않으면 에러 없이 자동으로 기본값이 적용됩니다. Query 객체를 활용하면 더욱 세밀한 제한도 줄 수 있습니다.

바디(Body) 파라미터: 구조화된 데이터의 처리

복잡한 정보를 전달할 때는 주로 HTTP 요청의 본문에 JSON 형식으로 데이터를 담습니다. FastAPI에서는 Pydantic 모델을 이용해 Body 파라미터를 선언하고, 마치 함수 인자처럼 사용할 수 있습니다.

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str | None = None
    price: float

@app.post("/items/")
def create_item(item: Item):
    return item

이 방식은 단일 값이 아닌 구조체 데이터의 입력이 필요할 때 용이합니다. 또한 자동으로 데이터의 타입과 형식 체크가 이루어져 개발자는 비즈니스 로직에만 집중하면 됩니다.

세 가지 방식의 조화로운 사용

FastAPI는 Path, Query, Body 파라미터를 혼합하여 쓰는 것을 자연스럽게 지원합니다. 각기 다른 입력이 어디에서 오는지 명확히 구분되어, 복잡한 API도 쉽게 구축할 수 있습니다. 예를 들면:

@app.put("/users/{user_id}")
def update_user(user_id: int, age: int | None = None, info: Item | None = None):
    return {"user_id": user_id, "age": age, "info": info}

Path로 식별자를 받고, Query로 옵션을 추가하며, Body로 구조화된 데이터를 접수하는 모습입니다.

실전에서 주의할 점과 팁

  • Path, Query, Body 파라미터 명은 함수 인자의 이름과 반드시 일치해야 합니다.

  • 타입 힌트를 활용하여 잘못된 데이터가 들어오는 것을 미리 방지할 수 있습니다.

  • Body 파라미터는 GET 요청에서는 잘 사용하지 않으니 주의해야 합니다.

  • pydantic의 강력한 검증 기능을 적극 활용하면, 입력 데이터의 신뢰성을 크게 높일 수 있습니다.

FastAPI의 입력 파라미터 시스템은 복잡해 보일 수 있으나, 올바르게 활용하면 효율적이고 견고한 API 설계가 가능합니다. 다음 장에서는 이 파라미터들을 실제 애플리케이션 아키텍처에서 어떻게 활용하는지, 그리고 다양한 확장 팁을 알아보겠습니다.


공유하기
카카오로 공유하기
페이스북 공유하기
트위터로 공유하기
url 복사하기