FastAPI 공식문서 따라하기[9] - Body Fields
https://fastapi.tiangolo.com/ko/ 공식문서 따라하는 글
☑️ 1. Body-Fields
Pydantic
에서 제공하는 Field
를 사용할 것이다.
지금까지는 FastAPI
에서 제공하는 Body
, Query
, Path
를 사용했다.
Field
를 이용하면 Pydantic
의 model
변수선언에 제약조건을 걸 수가 있다.
Field
를 pydantic
에서 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
이라는 클래스의 오브젝트를 리턴하는데, 이것은 또한Pydnatic
의FieldInfo
의 서브클래스이다. 또한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.