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의 유연성을 크게 향상시킬 수 있다.
반응형