Post, Put, Patch의 사용을 결정하는 것은 HTTP 메서드의 의미와 의도에 따라 결정됩니다. 각각의 메서드는 특정한 목적과 사용 사례를 가지며, 이를 이해하면 적절한 메서드를 선택하는 데 도움이 됩니다.
HTTP 메서드의 의미와 사용 사례
POST:
- 의미: 새로운 리소스를 생성합니다.
- 사용 사례:
- 새로운 사용자 계정을 생성할 때
- 새로운 게시글을 작성할 때
- 새로운 항목을 데이터베이스에 추가할 때
- 특징:
- 멱등하지 않음: 같은 요청을 여러 번 보내면 여러 리소스가 생성될 수 있습니다.
- 일반적으로 리소스의 URI는 서버가 생성합니다.
- 예시:
@app.post("/users/") async def create_user(user: User): # 사용자 생성 로직
PUT:
- 의미: 리소스를 생성하거나, 전체 리소스를 대체합니다.
- 사용 사례:
- 사용자의 전체 정보를 업데이트할 때
- 특정 리소스를 전체적으로 대체할 때
- 특징:
- 멱등함: 같은 요청을 여러 번 보내도 결과는 동일합니다.
- URI가 지정된 리소스를 대상으로 합니다.
- 예시:
@app.put("/users/{user_id}") async def update_user(user_id: int, user: User): # 사용자 정보 대체 로직
PATCH:
- 의미: 리소스의 일부를 수정합니다.
- 사용 사례:
- 사용자의 특정 필드를 업데이트할 때 (예: 이메일 주소 변경)
- 리소스의 부분적인 업데이트가 필요할 때
- 특징:
- 멱등하지 않을 수 있음: 부분 업데이트는 여러 번 보내도 결과가 동일하지 않을 수 있습니다.
- URI가 지정된 리소스를 대상으로 합니다.
- 예시:
@app.patch("/users/{user_id}") async def partial_update_user(user_id: int, user: PartialUser): # 사용자 정보 부분 수정 로직
결정 기준
새로운 리소스 생성: POST
- 예: 새로운 블로그 게시글 작성
- 예: 새로운 주문 생성
전체 리소스 대체 또는 생성: PUT
- 예: 사용자 프로필 전체 업데이트
- 예: 특정 ID의 제품 정보 전체 대체
리소스의 일부 수정: PATCH
- 예: 사용자 이메일 업데이트
- 예: 주문 상태 변경
구체적인 예제
사용자 정보를 관리하는 API를 예로 들어보겠습니다.
POST: 새로운 사용자 생성
from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class User(BaseModel): name: str email: str @app.post("/users/") async def create_user(user: User): # 새로운 사용자 생성 로직 return {"message": "User created", "user": user}
PUT: 사용자 정보 전체 업데이트
@app.put("/users/{user_id}") async def update_user(user_id: int, user: User): # 사용자 정보 전체 대체 로직 return {"message": "User updated", "user_id": user_id, "user": user}
PATCH: 사용자 정보 부분 업데이트
class PartialUser(BaseModel): name: Optional[str] = None email: Optional[str] = None @app.patch("/users/{user_id}") async def partial_update_user(user_id: int, user: PartialUser): # 사용자 정보 부분 수정 로직 return {"message": "User partially updated", "user_id": user_id, "user": user}
이렇게 HTTP 메서드의 의미와 사용 사례를 명확히 이해하고, 각 메서드의 특징을 고려하여 적절한 메서드를 선택하면, API 설계가 명확하고 일관성 있게 됩니다.
반응형
'다이어리' 카테고리의 다른 글
[Python]셀레니움+ChatGPT 다시 시도 (0) | 2024.08.05 |
---|---|
메이플 캐릭터 조회 Lalainfo (0) | 2024.08.02 |
Python API 서버 구축 연습중 (0) | 2024.07.23 |
게임서버를 NodeJS 대신 Python으로 구축하는 것에 대해 (0) | 2024.07.23 |
UI Toolkit 학습중 (0) | 2024.07.22 |