[FastAPI Docs] Request Body

JeongChaeJin·2022년 8월 23일
0
  • request Body는 API로 client가 보낸 data이다.
  • response Body는 API가 client에게 보낸 data이다.
  • 보통 API는 reponse body를 보내지만, client는 request body를 할 필요는 없다.
  • data 전송 시 POST,PUT,DELETE or PATCH 등을 이용해야된다.

Import BaseModel

from pydantic import BaseModel
  • pydantic의 BaseModel을 import

Create your data model

class Item(BaseModel):
    name: str
    description: Union[str, None] = None
    price: float
    tax: Union[float, None] = None
  • 쿼리 매개변수를 선언할 때와 같이 model attribute는 defulat 값을 가지고 있으면 필수적인 값은 아니다.
    • Optional로 만들고 싶으면 Noe을 사용한다.

Declare it as a parameter

@app.post("/items/")
async def create_item(item: Item):
  • Item이라고 위에서 선언한 model로 type이 선언된다.

Results

  • FastAPI는 JSON 으로 request body를 읽는다.
  • 해당 타입으로 변환가능하다.
  • data를 검증한다.
    • invalid 시, error 발생
  • model에 대한 JSON Schema를 생성한다.
    • editor support
    • docs automation

Use the model

@app.post("/items/")
async def create_item(item: Item):
    item_dict = item.dict()
    if item.tax:
        price_with_tax = item.price + item.tax
        item_dict.update({"price_with_tax": price_with_tax})
    return item_dict
  • model 객체에 직접적으로 속성에 접근 가하다.

Request body + path + query parameters

from typing import Union

from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    name: str
    description: Union[str, None] = None
    price: float
    tax: Union[float, None] = None


app = FastAPI()


@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item, q: Union[str, None] = None):
    result = {"item_id": item_id, **item.dict()}
    if q:
        result.update({"q": q})
    return result
profile
OnePunchLotto

0개의 댓글