Skip to content

๋ณธ๋ฌธ - ํ•„๋“œ

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 ์Šคํ‚ค๋งˆ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ํ‚ค์›Œ๋“œ ์ธ์ž ๋˜ํ•œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.