REST API에서 PATCH와 PUT의 차이점
ㅁ 들어가며
ㅇ SOAP과 REST 비교에 대한 글을 작성하였다.
ㅇ Restful는 웹 서비스와 모바일 애플리케이션 경량화의 필요에 맞춘 아키텍처 원칙 세트이다.
ㅇ 기존에 업데이트를 위한 PUT 메서드만 알고 있었는데, 더욱 경량화된 PATCH메서드를 알게 되었다.
ㅇ PATCH와 PUT의 차이점을 알아보고 멱등성의 보장 여부에 대해서 정리하였다.
ㅁ REST API에서 PATCH와 PUT의 차이점
ㅇ REST API에서 자원을 업데이트할 때 사용하는 두 가지 일반적인 HTTP 메서드는 PATCH와 PUT가 있다.
ㅇ 두 메서드 모두 기존 자원을 변경하는 데 사용되지만, 변경 범위와 방식에 있어 중요한 차이점을 가지고 있다.
ㅁ PUT 변경 범위
ㅇ PUT 메서드는 전체 자원을 수정한다.
ㅇ 요청 시 전달된 모든 데이터가 기존 데이터를 덮어쓴다.
ㅇ PUT 요청을 보낼 때는 반드시 변경하려는 모든 데이터를 포함해야 한다.
ㅁ PATCH 변경 범위
ㅇ PATCH 메서드는 부분적인 자원을 업데이트한다.
ㅇ 요청 본문에 포함된 일부 필드만 변경하고 나머지 필드는 기존 값을 유지한다.
ㅇ PATCH 요청을 보낼 때는 변경하려는 필드만 명시하면 된다.
ㅇ 불필요한 데이터의 전송 시 발생하는 오버헤드를 감소시키는 장점이 있다.
ㅁ 변경 방식, 멱등성(idempotence)의 차이
ㅇ PUT 메서드는 멱등성(idempotence)을 보장한다.
ㄴ 즉, 동일한 PUT 요청을 여러 번 전송해도 자원의 상태는 한 번만 변경된다.
ㅇ PATCH 메서드는 일반적으로 멱등성을 보장하지 않는다.
ㄴ 즉, 동일한 PATCH 요청을 여러 번 전송하면 자원의 상태가 여러 번 변경될 수 있다.
ㄴ 단, 요청 본문에 적절한 조건을 명시하면 멱등성을 보장하도록 구현할 수도 있다.
ㅁ 사용 방식
ㅇ PUT과 PATCH의 멱등성(idempotence)의 차이로 인해 사용 방식에도 차이가 있다.
- PUT: 다음과 같은 경우 PUT 메서드를 사용하는 것이 좋다.
- 자원을 새로운 상태로 완전히 변경해야 하는 경우
- 자원의 모든 데이터를 정확하게 파악하고 있는 경우
- 멱등성이 중요한 경우
- PATCH: 다음과 같은 경우 PATCH 메서드를 사용하는 것이 좋다.
- 자원의 일부 필드만 변경해야 하는 경우
- 자원의 모든 데이터를 파악하지 못하거나 파악하기 어려운 경우
- 멱등성이 중요하지 않거나 명확하게 정의되지 않은 경우
ㅁ 예시
- 사용자 정보 업데이트:
- PUT 요청: 사용자의 모든 정보 (이름, 이메일, 주소 등)를 변경하려는 경우 PUT 요청을 사용한다.
- 요청 본문에는 변경하려는 모든 정보를 포함된다.
{ "name": "홍길동 개선", "email": "hong@example.com", "address": "서울특별시 강남구" }
- PATCH 요청: 사용자의 이름과 이메일만 변경하려는 경우 PATCH 요청을 사용한다.
- 요청 본문에는 변경하려는 필드만 포함하면 된다.
{ "name": "홍길동 개선", "email": "hong@example.com" }
- 상품 정보 업데이트:
- PUT 요청: 상품의 가격, 재고, 설명 등 모든 정보를 변경하려는 경우 PUT 요청을 사용한다.
- 요청 본문에는 변경하려는 모든 정보를 포함해야 한다.
- PATCH 요청: 상품의 가격만 변경하려는 경우 PATCH 요청을 사용한다.
- 요청 본문에는 변경하려는 필드만 포함하면 된다.
- PUT 요청: 상품의 가격, 재고, 설명 등 모든 정보를 변경하려는 경우 PUT 요청을 사용한다.
ㅁ 마무리
PATCH와 PUT은 모두 REST API에서 자원을 업데이트하는 데 사용되는 유용한 메서드이지만, 변경 범위, 방식, 사용 시나리오에 따라 적절한 메서드를 선택해야 한다.
- 전체 자원을 대체하고 멱등성이 중요한 경우 PUT 메서드를 사용한다.
- 부분적인 자원 업데이트 또는 멱등성이 중요하지 않은 경우 PATCH 메서드를 사용한다.
- 일부 API는 자체적인 규칙을 정의하여 PATCH와 PUT의 사용 방식을 명시적으로 제한할 수 있다.
- 개발 팀 내에서 일관된 방식으로 PATCH와 PUT을 사용하도록 약속하여 불필요한 데이터의 전송 오버헤드를 줄일 수 있다.
요약표
HTTP 메소드 | 요청 Body | 응답 Body | 안전 | 멱등성 | 캐시 가능 |
GET | 선택 사항 | 예 | 예 | 예 | 예 |
HEAD | 선택 사항 | 아니요 | 예 | 예 | 예 |
POST | 예 | 예 | 아니요 | 아니요 | 예 |
PUT | 예 | 예 | 아니요 | 예 | 아니요 |
DELETE | 선택 사항 | 예 | 아니요 | 예 | 아니요 |
CONNECT | 선택 사항 | 예 | 아니요 | 아니요 | 아니요 |
OPTIONS | 선택 사항 | 예 | 예 | 예 | 아니요 |
TRACE | 아니요 | 예 | 예 | 예 | 아니요 |
PATCH | 예 | 예 | 아니요 | 아니요 | 아아니요니요 |
ㅇ wikipedia HTTP에 수록된 메서드별 메소드에 대한 도표이다.
ㅇ PATCH 뿐만 아니라 다른 선택적 메소드가 존재한다.