게시글을 수정하는 API를 제작하다가 PUT과 PATCH 둘 중 어떤 HTTP Method가 더 적합한지 찾아보았다.
PUT, PATCH에 대해 MDN 공식문서를 보았다.
- PUT은 페이로드를 사용해 새로운 리소스를 생성하거나, 대상 리소스를 나타내는 데이터를 대체합니다.
- PATCH는 리소스의 부분적인 수정을 할 때 사용된다.
사실 글로만 봐서는 와닿지는 않는데 예시를 통해 알아보자.
PUT
PUT의 경우에는 아래와 같이 책 정보가 있다고 할 때
| 책(book) | 1 |
|---|---|
| 제목 | 객체지향의 사실과 오해 |
| 부제 | 역할, 책임, 협력 관점에서 본 객체지향 |
| 글쓴이 | 조영호 |
해당 PUT 요청을 보내면
PUT /book/1
{
title: "Test-Driven Development",
description: "테스트 주도 개발",
writer: "켄트 백"
}
아래와 같이 리소스가 변경된다.
| 책(book) | 1 |
|---|---|
| 제목 | Test-Driven Development |
| 부제 | 테스트 주도 개발 |
| 글쓴이 | 켄트 백 |
그럼 부제와 글쓴이를 제외하고 제목만 보낼 시에는
PUT /book/1
{
title: "일은 배신하지 않는다"
}
| 책(book) | 1 |
|---|---|
| 제목 | 일은 배신하지 않는다 |
| 부제 | null |
| 글쓴이 | null |
제목을 제외한 부제와 글쓴이는 null로 리소스가 생성된다.
PATCH
PATCH의 경우에는 아래와 같이 책 정보가 있다고 할 때
| 책(book) | 1 |
|---|---|
| 제목 | 객체지향의 사실과 오해 |
| 부제 | 역할, 책임, 협력 관점에서 본 객체지향 |
| 글쓴이 | 조영호 |
해당 PATCH 요청을 보내면
PATCH /board/1
{
title: "The Essence of Object-Orientation"
}
| 책(book) | 1 |
|---|---|
| 제목 | The Essence of Object-Orientation |
| 부제 | 역할, 책임, 협력 관점에서 본 객체지향 |
| 글쓴이 | 조영호 |
페이로드에 있는 제목만 수정된다는 차이점이 있다.
- 요약
- PUT은 리소스 전체를 새롭게 생성 또는 수정
- PATCH는 요청한 리소스 부분 수정