회사에서 Python + FastAPI로 개발을 하게 되었다.
그래서 공식문서를 훑어보았다.
1. Request Body
클라이언트(예: 브라우저)에서 API로 데이터를 보내야 할 때 request body으로 보낸다.
넘길 파라미터가 한, 두개 면 그냥 넘기고 받으면 되지만, 넘길 파라미터가 많으면 코드량이 많아진다.
Request Body는 클라이언트에서 API로 보내는 데이터.
Response Body는 API가 클라이언트로 보내는 데이터.
- main.py
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
return item
BaseModel은 Pydantic 모듈에서 제공하는 클래스로, 데이터 모델링과 유효성 검사를 쉽게 할 수 있게 해준다.
이를 사용하여 데이터 스키마를 정의하고, 데이터 유효성 검사를 수행하며, JSON 직렬화 및 역직렬화도 수행할 수 있다. BaseModel 클래스를 상속받아 필드를 정의하고, 필요한 메서드를 추가하여 사용한다.
{
"name": "a",
"description": "aaa",
"price": 1,
"tax": 1
}
{
"name": "b",
"price": 1
}
description과 tax는 필수 요소가 아니기 때문에 데이터를 'b'처럼 삭제해도된다.
테스트는 docs에서 하면 편하다.
2. Query parameter 검증
Request Body를 BaseModel로 검증했던 것 처럼 Parameter도 검증이 가능하다.
- main.py
from typing import Union
from fastapi import FastAPI, Path, Query
app = FastAPI()
@app.get("/items/{item_id}")
async def read_items(
item_id: int = Path(title="The ID of the item to get"),
q: Union[str, None] = Query(default=None, alias="item-query"),
):
results = {"item_id": item_id}
if q:
results.update({"q": q})
return results
Path, Query를 이용해서 Swagger Docs에 설명을 추가할 수 있다.
- 파라미터가 str인 경우
@app.get("/items/")
async def read_items(
q: Annotated[
str | None, Query(min_length=3, max_length=50, regex="^fixedquery$")
] = None
):
...
최소길이, 최대길이, 정규식을 이용해 검증 처리했다.
Parameter가 지정된 제약 조건을 충족하지 않으면 FastAPI는 자동으로 422 Unprocessable Entity 응답을 반환한다.
- 파라미터가 int인 경우
@app.get("/items/{item_id}")
async def read_items(item_id: int = Path(title="The ID of the item to get", ge=1)):
...
ge는 크거나 같다. e는 같다. le는 작거나 같다를 뜻한다.
'개발 > Python' 카테고리의 다른 글
[Python] append 와 extend 차이 (113) | 2024.11.01 |
---|---|
[Python] ENUM 타입 사용하기 (0) | 2023.06.10 |
[Python] @classmethod 사용하기 (0) | 2023.06.09 |
[FastAPI] FastAPI 시작하기 Response Model ~ File 요청 (1) | 2023.05.17 |
[FastAPI] FastAPI 시작하기 도입부~쿼리 매개변수 (0) | 2023.05.15 |