Backend Framework/FastAPI

02. FastAPI - Request Parameter

Python Developer 2025. 4. 22. 17:12

02. FastAPI - Request Parameter

1️⃣ Path Parameter

path에 정보를 담아서 Request로 전달

✅ 예시 코드

from fastapi import FastAPI
from typing import Optional

app = FastAPI()

@app.get("/products/{product_id}")
async def get_product(product_id: int):
    return {"product_id": product_id}
  • 요청: http://localhost:8081/products/3
  • /products/까지가 path, 이후 숫자 3이 parameter로 전달됨
  • product_idint형으로 선언되어 있어 문자열 전달 시 에러 발생
    ex) http://localhost:8081/products/abc

✅ 결과

# 정상 요청
http://localhost:8081/products/3
→ {"product_id": 3}

# 에러 요청
http://localhost:8081/products/abc
→ 422 Unprocessable Entity

2️⃣ Query Parameter

URL에서 ? 뒤에 오는 key=value 쌍의 형태로 전달하며, &로 구분한다.

✅ 예시 코드

mock_data = [
    {"name": "Alpha"},
    {"name": "Beta"},
    {"name": "Gamma"},
    {"name": "Delta"}
]

@app.get("/products")
async def get_products(offset: int = 0, count: int = 4):
    return mock_data[offset : offset + count]
  • 요청: http://localhost:8081/products?offset=1&count=2
  • offset=1count=2는 query parameter
  • &는 여러 query 인자를 구분하는 역할
  • 인자를 주지 않으면 offset=0, count=4가 기본값

✅ 결과

# 요청
http://localhost:8081/products?offset=1&count=2
→ [{"name": "Beta"}, {"name": "Gamma"}]

# 기본값 사용
http://localhost:8081/products
→ [{"name": "Alpha"}, {"name": "Beta"}, {"name": "Gamma"}, {"name": "Delta"}]

3️⃣ 기본값(default) 설정하지 않은 경우

✅ 예시 코드

@app.get("/products_required/")
async def get_products_required(offset: int, count: int):
    return mock_data[offset : offset + count]
  • offset, count에 기본값이 없기 때문에 반드시 값을 넘겨야 함

✅ 결과

# 에러 (인자 없음)
http://localhost:8081/products_required
→ 422 Unprocessable Entity

# 정상 요청
http://localhost:8081/products_required?offset=1&count=2
→ [{"name": "Beta"}, {"name": "Gamma"}]

4️⃣ Optional Parameter (선택 인자)

✅ 예시 코드

@app.get("/products_optional/")
async def get_products_optional(offset: int, count: int = None):
    if count:
        return mock_data[offset : offset + count]
    else:
        return {"message": "count is not provided"}
  • count는 선택 인자이며, 입력되지 않으면 None으로 처리됨
  • Python 3.10 이상에서는 count: int | None = None 사용 가능

✅ 결과

# count 없음
http://localhost:8081/products_optional?offset=1
→ {"message": "count is not provided"}

# count 있음
http://localhost:8081/products_optional?offset=1&count=2
→ [{"name": "Beta"}, {"name": "Gamma"}]

5️⃣ Path + Query Parameter 함께 사용

✅ 예시 코드

@app.get("/products/{product_id}")
async def get_product_detail(product_id: str, detail: str | None = None):
    if detail:
        return {"product_id": product_id, "detail": detail}
    return {"product_id": product_id}

✅ 결과

# 쿼리 파라미터 없음
http://localhost:8081/products/item1
→ {"product_id": "item1"}

# 쿼리 파라미터 있음
http://localhost:8081/products/item2?detail=full
→ {"product_id": "item2", "detail": "full"}

'Backend Framework > FastAPI' 카테고리의 다른 글

03. FastAPI - Request Body(JSON), Form(HTML) 처리  (0) 2025.04.22
01. FastAPI - 시작하기  (0) 2025.04.21