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_id
가int
형으로 선언되어 있어 문자열 전달 시 에러 발생
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=1
과count=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 |