python / / 2024. 8. 16. 13:50

[fastapi] body update: put, patch, exclude_unset에 대한 이해

1. PUT과 PATCH의 차이점

PUT과 PATCH는 모두 리소스를 업데이트하는 데 사용되는 HTTP 메소드이다. 그러나 이 둘은 특정한 차이점이 있다.

  • PUT: 전체 리소스를 업데이트한다. 즉, 보낼 데이터는 해당 리소스의 모든 필드를 포함해야 하며, 누락된 필드는 기본값으로 설정된다.
  • PATCH: 부분 업데이트를 수행한다. 보내는 데이터는 수정하려는 필드만 포함한다. 이 때문에 PATCH는 더 효율적이고 유연하게 사용될 수 있다.

예제

from fastapi import FastAPI
from pydantic import BaseModel
from typing import Optional

app = FastAPI()

class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    quantity: int

items = {}

@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item):
    items[item_id] = item
    return item

@app.patch("/items/{item_id}")
async def partial_update_item(item_id: int, item: Item):
    if item_id in items:
        existing_item = items[item_id]
        update_fields = item.dict(exclude_unset=True)  # 변경된 필드만 받아오기
        for key, value in update_fields.items():
            setattr(existing_item, key, value)
        items[item_id] = existing_item
        return existing_item
    return {"error": "Item not found"}

2. exclude_unset 파라미터 설명

exclude_unset은 Pydantic 모델에서 사용되는 중요한 속성이다. 이 파라미터를 True로 설정하면, 기본값이 설정된 필드는 출력에서 제외된다. 주로 PATCH 요청에서 사용되며, JSON 바디에서 제공된 필드만 처리할 수 있도록 도와준다.

사용 예

위의 PATCH 예제에서 item.dict(exclude_unset=True)를 통해 누락된 필드가 될 수 있는 기본값이 아닌 필드만 업데이트할 수 있다. 이렇게 하면 API의 유연성을 크게 향상시킬 수 있다.

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유