728x90
반응형
PUT, PATCH
- PUT 요청은 전체 객체를 대체하는 데 사용
- 클라이언트가 전체 객체를 제공하여 서버에 저장된 기존 객체를 완전히 대체
@app.put("/items/{item_id}", response_model=Item)
async def update_item(item_id: str, item: Item):
update_item_encoded = jsonable_encoder(item)
items[item_id] = update_item_encoded
return update_item_encoded
- PATCH 요청은 부분 업데이트에 사용
- 클라이언트가 업데이트하려는 필드만 제공하고, 나머지 필드는 그대로 유지
- exclude_unset 옵션
- True로 설정 시: Pydantic 모델에서 설정되지 않은 기본값을 제외한 데이터를 처리
- 기본값으로 설정된 필드 값들을 요청 본문에서 제공되지 않은 필드 값으로 간주하여 업데이트에서 제외하는 것을 의미
- 이를 통해 PUT 요청에서도 부분 업데이트를 수행할 수는 있음(일반적이지는 않음)(PATCH를 쓰는 것이 일반적)
- 전체 데이터를 교체하는 용도로 사용되지만, exclude_unset=True를 사용하여 부분 업데이트 수행은 가능
- False(기본값)로 설정 시: Pydantic 모델에서 명시적으로 제공되지 않은 필드들이 기본값으로 대체
- 기존 데이터가 있더라도 기본값이 설정된 필드는 해당 기본값으로 바뀜
- True로 설정 시: Pydantic 모델에서 설정되지 않은 기본값을 제외한 데이터를 처리
@app.patch("/items/{item_id}", response_model=Item)
async def update_item(item_id: str, item: Item):
stored_item_data = items[item_id]
stored_item_model = Item(**stored_item_data) # 기존 데이터를 기반으로 Pydantic 모델 인스턴스를 생성
update_data = item.dict(exclude_unset=True) # 클라이언트로부터 받은 데이터를 딕셔너리로 변환하되, 기본값은 제외
updated_item = stored_item_model.copy(update=update_data) # 기존 모델의 복사본을 만들고, 받은 데이터를 사용하여 업데이트
items[item_id] = jsonable_encoder(updated_item) # 업데이트된 데이터를 JSON 호환 형태로 변환하여 저장
# 업데이트된 데이터를 데이터베이스에 넣는 처리를 하면 실제 데이터베이스에도 반영
return updated_item
728x90
반응형
'Programming Language > Python' 카테고리의 다른 글
[SQLAlchemy] 2. Connection, Commit, Query, Bound parameters (0) | 2024.06.22 |
---|---|
[SQLAlchemy] 1. Engine (0) | 2024.06.22 |
[FastAPI] 11. JSON 호환 인코더: jsonable_encoder (0) | 2024.06.20 |
[FastAPI] 10. Form Data & Request File (0) | 2024.06.20 |
[FastAPI] 9. Extra Data Types (0) | 2024.06.19 |