fastapi 찍먹 2편

2023. 8. 7. 18:50Backend(Python)/Fast API

✅ 아래 내용들에 대해서 알아보자

- 쿼리 매개변수
- HTTP 요청

 

 

쿼리 매개변수

 쿼리 매개변수는?(물음표)를 사용하여 나타내고 &를 사용하여 쿼리 파라미터를 구분한다.

 

예를 들어, http://localhost:8000/items/1?q=3&short=true의 1은 item_id 값으로 스프링으로 비유하자면 pathVariable이고 q와 short는 각각 쿼리 매개변수로 식별된다.

 

그리고 매개변수에 타입을 설정할 수 있다. (item_id:str, short:bool 등..)

 

자세한 건 아래 코드를 참고하자

 

"""
    쿼리 매개변수
"""
from typing import Union
from fastapi import FastAPI

app = FastAPI()

fake_items_db = [
    {"item_name": "Foo"},
    {"item_name": "Bar"},
    {"item_name": "Baz"},
]


# 쿼리 매개변수(http://127.0.0.1:8000/items?skip=0&limit=10(스프링이랑 똑같네..))
@app.get("/items")
async def read_item(skip: int = 0, limit: int = 10):
    return fake_items_db[skip : skip + limit]


# 선택적 매개변수 (http://localhost:8000/items/1?q=13)
# q=None -> 선택적 매개변수(기본값 None으로 설정)
@app.get("/items/{item_id}")
async def read_item2(item_id: str, q: Union[str, None] = None):
    if q:
        return {"item_id": item_id, "q": q}
    return {"item_id": item_id}


# 쿼리 매개변수 형변환(http://localhost:8000/items/1?q=3&short=true)
@app.get("/items/{item_id}")
async def read_item3(
    item_id: str,
    q: Union[str, None] = None,
    short: bool = False,
):
    item = {"item_id": item_id}
    if q:
        item.update({"q": q})
    if not short:
        item.update({"description": "This is an long description"})

    return item


# 필수 쿼리 매개변수
@app.get("/items/{item_id}")
async def read_item4(
    item_id: str,
    needy: str,  # 필수 매개변수
    skip: int = 0,
    limit: Union[int, None] = None,  # 선택적 매개변수
):
    item = {"item_id": item_id, "needy": needy, "skip": skip, "limit": limit}
    return item

 

 

HTTP 요청

  API로 데이터를 보내야 하는 경우 request body로 보내야 한다.

아래의 Item 클래스를 request body로 받는 api들이 있는데 FastAPI가 request body를 JSON으로 읽어 데이터를 검증하게 된다.

 

자세한 건 아래 코드 참고하자

 

"""
    request body
"""
from tkinter import NO
from fastapi import FastAPI
from pydantic import BaseModel


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


app = FastAPI()


# post 요청
@app.post("/items/")
async def create_item(item: Item):
    print(item.name.capitalize())
    return item


@app.put("/items/{item_id}")
async def create_item2(item_id: int, item: Item):
    return {"Item_id": item_id, **item.model_dump()}
반응형

'Backend(Python) > Fast API' 카테고리의 다른 글

FastAPI 찍먹 3편  (0) 2023.08.11
fastapi 찍먹 1편  (0) 2023.08.05
파이썬 프레임워크 고민이 된다면..  (0) 2023.07.29