FastAPI에서는 parameter를 query와 path로 구분한다.
1. 경로 파라미터(Path parameters)
경로 파라미터는 URL의 경로에 "/"를 구분으로 포함되는 파라미터이다.
@app.get("/get_item/{item_id}")
def get_item(item_id:int):
for item in items:
if item["item_id"] == item_id:
return item
return {"error": "Item not found"}
- "/"를 기준으로 {}안의 변수가 path parameter가 된다.
FastAPI docs에서 보면 실제로 주소가 "/"를 기준으로 나온 것을 확인할 수 있다,

실제로 URL로 접근하면 다음과 같이 get_item/2의 정보를 response한다.

2. 쿼리 파라미터(Query parameters)
쿼리 파라미터는 "?"와 "&"를 기준으로 구분하여 key=value의 형태로 구성된다.
@app.get("/get_item")
def get_item(item_id:int):
for item in items:
if item["item_id"] == item_id:
return item
return {"error": "Item not found"}
FastAPI docs에서 보면 path parameter와 달리 request URL에 item_id=3이라고 적힌 것을 확인할 수 있다.

URL에 다음과 같이 접근하면 get_item?item_id=3의 정보를 response한다.

이때 query를 구분하는 것이 "&"이다.
FastAPI 개발일지 7의 post를 보면 다음과 같은 Request URL을 볼 수 있다.

이 URL을 분석해보자
- 7 : 경로 파라미터
- item_name=not : 쿼리 파라미터
- item_price=600 : 쿼리 파라미터
- 쿼리 파라미터가 시작할 때는 "?"로 시작하고 파라미터 사이의 구분은 "&"로 구분한다.
3. Request Body
Request Body는 json 형태로 클라이언트와 서버의 전송 방식이다.
pydantic의 basemodel을 사용한다.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
items = [
{"item_id": 1, "item_name":"untoc", "item_price":15000},
{"item_id": 2, "item_name":"phone", "item_price":35000},
{"item_id": 3, "item_name":"computer", "item_price":24000},
{"item_id": 4, "item_name":"pencil", "item_price":1000},
{"item_id": 5, "item_name":"mouse", "item_price":2000},
{"item_id": 6, "item_name":"water", "item_price":100}
]
class create_model(BaseModel):
item_id:int
item_name: str
item_price: int
@app.post("/create_item/{item_id}", response_model=create_model)
def create_itme(item:create_model):
items.append({"item_id":item.item_id,
"item_name":item.item_name,
"item_price": item.item_price})
return items[item.item_id - 1]
- basemodel을 사용하여 create_model class 생성
- response model 지정(return 양식)
- 함수의 파라미터를 create_model로 지정하여 class로 관리
FastAPI docs로 확인하면 파라미터 없이, Request body를 통해 관리한다.

class를 통해 data를 전송하면 관리도 편하고, 상속을 사용할 수 있어서 효율적으로 프로젝트를 개발할 수 있다.
'FastAPI 개발일지 > 개발하기' 카테고리의 다른 글
FastAPI 개발일지11 - database 연결하기 (4) | 2024.10.15 |
---|---|
FastAPI 개발일지10 - 중간 점검 (0) | 2024.10.10 |
FastAPI 개발일지9 - APIRouter (2) | 2024.10.05 |
FastAPI 개발일지7 - get, post, put, delete (0) | 2024.09.19 |
FastAPI 개발일지6 - FastAPI 시작하기 (2) | 2024.09.17 |