코딩/파이썬

[새싹 성동 2기] Pydantic 모델을 사용한 요청 본문 검증

insu90 2024. 12. 16. 17:11

FastAPI에서는 데이터 유효성 검증을 간단하고 효율적으로 처리할 수 있습니다. Pydantic 모델을 사용하면 요청 본문 데이터를 구조화하고 검증할 수 있으며, 검증에 실패하면 FastAPI는 422(Unprocessable Content) 응답을 자동으로 반환합니다.

Pydantic 모델 정의

Pydantic은 데이터 구조를 정의하고, 요청 및 응답 데이터의 유효성을 검사하는 데 사용됩니다. 이를 통해 애플리케이션의 데이터를 안전하게 처리할 수 있습니다.

기본 모델 정의

다음은 할 일 데이터를 저장할 Pydantic 모델의 예입니다. 이 모델은 iditem 필드를 포함합니다.

model.py

from pydantic import BaseModel

class Todo(BaseModel):
    id: int
    item: str

FastAPI 라우터에서 Pydantic 모델 사용

요청 본문 데이터를 검증하기 위해 Pydantic 모델을 사용하여 API 라우터를 작성할 수 있습니다. 다음은 POST 요청으로 데이터를 추가하고 GET 요청으로 데이터를 조회하는 예입니다.

todo.py

from fastapi import APIRouter
from model import Todo

# 라우터 생성
todo_router = APIRouter()

# 데이터 저장용 리스트
todo_list = []

# POST 요청: 할 일 추가
@todo_router.post("/todo")
def add_todo(todo: Todo) -> dict:
    todo_list.append(todo)
    return {"message": "할 일을 추가합니다."}

# GET 요청: 할 일 조회
@todo_router.get("/todo")
def retrives_todo() -> dict:
    return {"todos": todo_list}

테스트

데이터 유효성 검증 실패 시 응답

Pydantic 모델에서 정의한 필드가 누락된 경우, FastAPI는 422(Unprocessable Content) 상태 코드와 함께 검증 실패 메시지를 반환합니다.

요청 예시

다음은 본문에 빈 JSON 데이터를 전송한 경우의 결과입니다.

curl http://localhost:8000/todo -X POST -d "{}" -H "Content-Type: application/json"

응답 예시

{
    "detail": [
        {"type": "missing", "loc": ["body", "id"], "msg": "Field required", "input": {}},
        {"type": "missing", "loc": ["body", "item"], "msg": "Field required", "input": {}}
    ]
}

데이터 유효성 검증 성공 시 응답

모델에 맞는 데이터를 전송하면 정상적으로 처리됩니다.

요청 예시

curl http://localhost:8000/todo -X POST -d "{ \"id\": 3, \"item\": \"세번째 할 일\"}" -H "Content-Type: application/json"

응답 예시

{
    "message": "할 일을 추가합니다."
}

중첩 모델 사용

Pydantic은 중첩된 데이터 구조도 지원합니다. 예를 들어, Todo 모델 내부에 다른 모델을 포함할 수 있습니다.

모델 정의

from pydantic import BaseModel

class Item(BaseModel):
    item: str
    status: str

class Todo(BaseModel):
    id: int
    item: Item

데이터 예시

중첩 모델을 사용하면 아래와 같은 형식의 데이터를 처리할 수 있습니다.

{
    "id": 1,
    "item": {
        "item": "중첩 모델 아이템",
        "status": "중첩됨"
    }
}

 

Pydantic 모델은 FastAPI에서 데이터 구조화와 유효성 검증을 간단하고 효과적으로 처리할 수 있는 강력한 도구입니다. 이를 활용하여 안정적이고 유지보수 가능한 API를 설계할 수 있습니다.

 

 

*생성형 AI 활용한 클라우드&보안 전문가 양성캠프 과정의 교육내용 정리 자료입니다.