- 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를 검증한다.
- 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