FastAPI 개발일지/개발하기

FastAPI 개발일지8 - Path, Query, Request body

hccode0419 2024. 10. 3. 17:26

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를 전송하면 관리도 편하고, 상속을 사용할 수 있어서 효율적으로 프로젝트를 개발할 수 있다.