๋ณธ๋ฌธ - ํ๋¶
Query,Path ๋ฐBody๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฝ๋ก ๋์ ํจ์ ๋งค๊ฐ๋ณ์์์ ์ถ๊ฐ ๊ฒ์ฆ ๋ฐ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ ์์๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, Pydantic์ Field๋ฅผ ์ฌ์ฉํ์ฌ Pydantic ๋ชจ๋ธ ๋ด๋ถ์์ ๊ฒ์ฆ ๋ฐ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค.
Field ์ํฌํธ¶
์ฐ์ , ์ด๋ฅผ ์ํฌํธํฉ๋๋ค:
from typing import Union
from fastapi import Body, FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
class Item(BaseModel):
name: str
description: Union[str, None] = Field(
default=None, title="The description of the item", max_length=300
)
price: float = Field(gt=0, description="The price must be greater than zero")
tax: Union[float, None] = None
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item = Body(embed=True)):
results = {"item_id": item_id, "item": item}
return results
๊ฒฝ๊ณ
Field๋ ๋๋จธ์ง ๊ฒ๋ค(Query, Path, Body, ๋ฑ)๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก fastapi๊ฐ ์๋๋ผ pydantic์์ ์ง์ ์ํฌํธ ํฉ๋๋ค
๋ชจ๋ธ ์ดํธ๋ฆฌ๋ทฐํธ ์ ์ธ¶
๋ชจ๋ธ ์ดํธ๋ฆฌ๋ทฐํธ์ ํจ๊ป Field๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
from typing import Union
from fastapi import Body, FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
class Item(BaseModel):
name: str
description: Union[str, None] = Field(
default=None, title="The description of the item", max_length=300
)
price: float = Field(gt=0, description="The price must be greater than zero")
tax: Union[float, None] = None
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item = Body(embed=True)):
results = {"item_id": item_id, "item": item}
return results
Field๋ Query, Path ๋ฐ Body์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์๋ํ๋ฉฐ, ๋ชจ๋ ๋งค๊ฐ๋ณ์ ๋ฑ์ด ๋์ผํฉ๋๋ค.
๊ธฐ์ ์ธ๋ถ์ฌํญ
์ฌ์ค, Query, Path ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ๋ถ์ด ๋์ค์ ๋ณด๊ฒ ๋ ๋ค๋ฅธ ๊ฒ๋ค์ FieldInfo ํด๋์ค์ ์๋ธ ํด๋์ค์ธ ๊ณตํต Param ํด๋์ค์ ์๋ธ ํด๋์ค ๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค.
๋ํ Pydantic์ Field๋ FieldInfo์ ์ธ์คํด์ค ์ญ์ ๋ฐํํฉ๋๋ค.
Body ์ญ์ FieldInfo์ ์๋ธ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ง์ ๋ฐํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ค์ ๋ณด๊ฒ ๋ Body ํด๋์ค์ ์๋ธ ํด๋์ค๋ ์์ต๋๋ค.
fastapi์์ Query, Path ๋ฐ ๋ค๋ฅธ ๊ฒ๋ค์ ์ํฌํธํ๋ฉด, ์ด๋ค ๋ชจ๋ ํน๋ณํ ํด๋์ค๋ฅผ ๋ฐํํ๋ ์ค์ ํจ์์์ ๊ธฐ์ตํ์ธ์.
ํ
ํ์
, ๊ธฐ๋ณธ๊ฐ, ๊ทธ๋ฆฌ๊ณ Field๋ฅผ ๊ฐ๋ ๊ฐ ๋ชจ๋ธ์ ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ Field ๋์ Path, Query ๋ฐ Body๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฝ๋ก ๋์ ํจ์ ๋งค๊ฐ๋ณ์์ ์ด๋ป๊ฒ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋์ง ์์๋์ธ์.
์ถ๊ฐ ์ ๋ณด ์ถ๊ฐ¶
Field, Query, Body ๋ฑ์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ ๋ณด๋ ์์ฑ๋ JSON ์คํค๋ง์ ํฌํจ๋ฉ๋๋ค.
์์ ์ ์ธํ๋ ๊ฒ์ ๋ฐฐ์ธ๋ ๋ฌธ์์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ๊ฒ์ ๋๋ค.
์์ฝ¶
๋ชจ๋ธ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ํ ์ถ๊ฐ ๊ฒ์ฆ๊ณผ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ๊ธฐ ์ํด Pydantic์ Field ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ถ๊ฐ JSON ์คํค๋ง ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ์ถ๊ฐ ํค์๋ ์ธ์ ๋ํ ์ฌ์ฉํ ์ ์์ต๋๋ค.