HTTP PUT, PATCH 차이

yanju·2022년 11월 30일
0
post-thumbnail

PUT, PATCH는 리소스의 업데이트를 의미한다.

PUT

PUT 메서드는 요청한 URI에 payload에 있는 자원으로 대체하는 메서드이다.

대체는 대상을 저장하기도 하고 변경하기도 한다는 것을 의미한다.

아래는 리소스에 PUT 요청을 보내는 예시다.

idbalancename
1100민석
220민찬
3-120민종

아래 두개의 요청에 대해 PUT은 다른 결과를 보인다.

1. 요청
PUT /customers?id=1
{
		name : 민돌
    balance : 0
}

2. 요청
PUT /customers?id=1
{
		name : 민돌
}
  1. 요청 결과
idbalancename
10민돌
220민찬
3-120민종
  1. 요청 결과
idbalancename
1null민돌
220민찬
3-120민종

PUT 요청 시 보내지 않은 값은 null로 대체된다.

PUT의 정의처럼 대상 리소스를 나타내는 데이터를 대체한다.


PATCH

PATCH 메서드는 자원의 부분 수정을 할 때 사용한다.

idbalancename
1100민석
220민찬
3-120민종

아래 두 개의 요청을 PATCH로 보내면 다른 결과를 보낸다.

1. 요청
PUT /customers?id=1
{
		name : 민돌
    balance : 0
}

2. 요청
PUT /customers?id=1
{
		name : 민돌
}
  1. 요청 결과
idbalancename
10민돌
220민찬
3-120민종
  1. 요청 결과
idbalancename
1100민돌
220민찬
3-120민종

PATCH 요청 시 보내지 않은 값은 그대로 유지한다.


멱등성

PATCH 메소드는 멱등성을 보장해주지 않는다.

PATCH 메소드는 구현 방법에 따라서 PUT 메소드처럼 멱등성이 보장될 수도 있고, 혹은 보장되지 않을 수도 있다.

PATCH 메소드는 PUT 메소드처럼 리소스를 대체하는 행위가 아니기 때문에 요청을 어떤 방식으로 사용하는지에 제한이 없다.

PATCH 메소드는 단지 리소스의 일부를 수정한다는 의미를 가진다.

다음 처럼 PATCH 요청을 보내면 멱등성이 보장된다.

// 기존 리소스
{
    id: 1,
    name: 'evan',
    age: 30,
}

PATCH 요청

PATCH users/1
{ age: 31 }

요청 결과

// 새로운 리소스
{
    id: 1,
    name: 'evan',
    age: 31, // 변경됨
}

위 PATCH 요청은 여러 번 수행해도 age는 31 값을 가진다.

다음과 같은 경우 PATCH 메소드가 멱등성 보장이 안될 수 있다.

PATCH users/1
{
    $increase: 'age',
    value: 1,
}

위 요청은 age 필드의 값을 1 증가시킨다.

이 경우 API가 호출될 때마다 age는 1씩 증가하기 때문에 멱등성을 보장하지 않는다.

0개의 댓글