Post

FastAPI 공식문서 따라하기[9] - Body Fields

https://fastapi.tiangolo.com/ko/ 공식문서 따라하는 글

☑️ 1. Body-Fields

Pydantic에서 제공하는 Field를 사용할 것이다.

지금까지는 FastAPI에서 제공하는 Body, Query, Path를 사용했다.

Field를 이용하면 Pydanticmodel 변수선언에 제약조건을 걸 수가 있다.

Fieldpydantic에서 import하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from fastapi import FastAPI,Body
from pydantic import BaseModel, Field

app = FastAPI()

class Item(BaseModel) :
    name : str
    description : str |  None = Field(
        None, title="The description of the item",max_length=300
    )
    price : float = Field(..., gt=0,description="The price must be greater than zero")
    tax: 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

Item에 선언된 속성들에 제약조건을 달았다.

Query,Path 등은 Param이라는 클래스의 오브젝트를 리턴하는데, 이것은 또한 PydnaticFieldInfo의 서브클래스이다. 또한 Field역시 FieldInfo의 인스턴스를 리턴하게 된다.
Body의 경우에도 마찬가지로 FieldInfo타입의 서브클래스를 리턴한다. 공식doc에서는 fastapi에서 import하는 Query,Path가 특별한 클래스를 리턴한다는 기능이 있다는걸 알고 있으면 좋겠다고 한다.

Field에 있는 기능들은 OpenAPI schema를 만들어내어 해당 docs에서 볼 수 있게 한다. 하지만 몇가지 기능들은 OpenAPI 명세에 포함되지 않을 수 있기에 만들어낸 스키마가 OpenAPI 툴에서 작동하지 않을 수 있다.


☑️ 정리

  • Pydantic의 Field를 이용해 model속성값의 검증을하고 메타데이터를 생성하였다.
  • JSON Schema metadata를 넘길때 예외적으로 발생할 수 있는 상황에 대해서 학습하였다.
This post is licensed under CC BY 4.0 by the author.