파이썬 현재 사용하는 버전이 3.9.11이라서, 문법이 구버전으로 맞춰져있습니다.
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.post("/items/")
async def create_item(item: Item):
return item
공식 문서에서 Request body를 선언할 때, Pydantic 모델을 사용하는 것을 권장한다.
Body를 선언하기 위해 pydantic의 BaseModel을 import 해주어야 한다.
class Item(BaseModel):
name: str
description: Union[str, None] = None
price: float
tax: Union[float, None] = None
name, price는 필수 어트리뷰트, description, tax는 선택 어트리뷰트
@app.post("/items/")
async def create_item(item: Item):
return item
post 방식의 /items/ 주소를 만들고, 호출되는 함수 create_item의 인자로 item을 받는다.
{
"name": "Foo",
"description": "An optional description",
"price": 45.2,
"tax": 3.5
}
{
"name": "Foo",
"price": 45.2
}
Request.body는 Json 객체를 입력받을 수 있다.
-> Fast API는
- request body를 JSON 형태로 읽는다.
- 필요하다면 형 변환을 해준다.
- 데이터를 검증하고, 테이터가 유효하지 않으면 잘 정리된 에러 반환
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.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
필수 어트리뷰트랑 선택 어트리뷰트로 새로운 값을 추출할 수 있다.
@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item):
return {"item_id": item_id, **item.dict()}
request.body와 path parameter, query parameter가 동시에 있는 경우 Fast API는 분리하여 인식한다.
위 코드는 기존 item dictionary에 path parameter로 들어온 item_id를 추가한다.
@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
위 코드는 query parameter로 들어온 q도 추가하는 코드.
get 방식이 아니라, post나 put으로 인자를 넣어서 보내주는 경우를 보여주고 있다.
주소로는 path, query parameter가 존재하고,
이번에는 request body로 넘어서 보내주는 방식에 대해 알아보았다.
'Framework, Library > Fast api' 카테고리의 다른 글
| [Fast_api] path parameters and Numeric validations (0) | 2023.04.27 |
|---|---|
| [Fast api] Query Parameters and String Validations (0) | 2023.04.27 |
| [Fast_api] 쿼리 매개변수 (0) | 2023.04.27 |
| [Fast_api] 경로 매개변수 (0) | 2023.04.27 |
| [Fast_api] start (0) | 2023.04.27 |