REST API HTTP Methods

Donghyun Kim·2022년 2월 24일
0

✔ GET

CRUD의 Read에 해당하는 HTTP 메소드로
자원을 받아오기만 할때 사용한다. (조회)

어떠한 방식으로도 자원의 상태를 변경시키지 않으므로, safe method라고 불리기도 한다.

✔ POST

CRUD의 Create에 해당하는 HTTP 메소드로
새로운 자원을 추가할 때 사용한다. (생성)

응답 코드로 201(Created)를 받아야 정상적으로 서버에 추가 되었음을 확인할 수 있다.

✔ PUT

CRUD의 Update에 해당하는 HTTP 메소드로
기존의 자원 전체를 변경 할 때 사용한다. (수정)

PUT 메소드는 자원의 전체를 변경시킨다. 따라서 변경할 대상 자원의 모든 필드의
값을 작성해서 요청해야한다. 만약 일부만 요청 할 경우 전달한 필드 데이터 외의
모든 필드는 전부 NULL로 변경되므로 주의해야한다.

자원을 변경시킨 경우 200(OK) 또는 204(No Content) 응답코드를 받게 된다.
만약 자원이 존재하지 않는 경우, API는 새로운 자원을 생성하도록 할 수 있다.
이 경우 응답코드는 201(Created)를 받게 된다.

✔ PATCH

CRUD의 Update에 해당하는 HTTP 메소드로
자원을 부분적으로 변경할 때 사용한다. (수정)

PATCH 메소드는 자원의 일부를 변경시킨다. 하지만 변경할 대상 자원의 모든 필드를
요청 할 경우 자원의 전체가 변경된다. 따라서 PUT 메소드와 다르게 변경될 대상 필드가
부분적으로 존재하여도 그 부분만을 변경하기 때문에 나머지 변경되지 않은 데이터는
그대로 유지된다.

💬 PATCH의 경우 모든 브라우저, 서버, 앱 어플리케이션 프레임워크에서 사용할 수 있는 것은 아니다.

✔ DELETE

CRUD의 Delete에 해당하는 HTTP 메소드로
자원을 삭제할 때 사용한다. (삭제)

DELETE 메소드를 요청하면 자원을 삭제하게 되는데, 반복적으로 DELETE를 호출한 경우 결과는 바뀌지 않는다. 하지만 이미 제거된 데이터를 제거하므로 404(NOT FOUND)를 반환받는다.

✔ 각 HTTP 메소드의 멱등 성질

• 멱등성(Idempotence)이란?

멱등성이란, 여러번 수행해도 결과가 같음을 의미한다. HTTP 메소드를 예를 들자면
GET, PUT, DELETE는 같은 경로로 여러 번 호출해도 결과가 같으므로 멱등하다.
그러나 POST는 매 호출마다 새로운 데이터가 추가된다. 따라서, POST 연산은
멱등하지않다. PATCH는 자원의 부분을 변경한다. 경우에 따라 멱등할 수도
멱등하지 않을 수도 있다.

• HTTP 메소드 별 멱등성 표

메소드기능멱등성
GETReadO
POSTCreateX
PUTUpdate(All)O
PATCHUpdate(Part)
DELETEDeleteO

✔ PATCH 멱등성 상세 설명

PATCH 메소드는 구현 방법에 따라서 PUT 메소드처럼 멱등성이 보장될 수도 있고,
혹은 보장되지 않을 수도 있다. PATCH 메소드는 PUT 메소드처럼 리소스를 대체하는
행위가 아니기 때문에 요청을 어떤 방식으로 사용하는지에 대한 제한이 딱히 없기 때문이다.
RFC 스펙 상의 PATCH 메소드는 단지 리소스의 일부를 수정한다는 의미만을 가질 뿐이다.

예를 들어, 다음과 같이 PATCH 메소드에 수정할 리소스의 일부분만 담아서 보내는 경우에는
당연히 멱등성이 보장된다.

// 기존 리소스
{
    id: 1,
    name: 'evan',
    age: 30,
}
> REST API 요청
PATCH users/1
{ age: 31 }
// 새로운 리소스
{
    id: 1,
    name: 'evan',
    age: 31, // 변경됨
}

이 PATCH 요청은 명확하게 age라는 필드를 31로 수정하는 행위만을 의미하므로 아무리 여러 번 수행해도 age는 늘 31이라는 값을 가지기 떄문이다.

그럼 언제 PATCH 메소드가 멱등성 보장이 안될 수도 있다는 것일까?
예를 들어 다음과 같이 요청했다고 가정해보자.

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

이 요청의 $increase 필드의 값은 증가시키고 싶은 속성을 의미하고, value 필드의 값은 그 속성을 얼마나 증가시킬 것인지를 나타낸다.
이 경우 API가 호출될 때마다 age는 1씩 증가하기 때문에 몇 번을 요청해도 같은 결과 값이
출력되어야하는 멱등성의 성질을 이 API는 보장하지 않는다.

따라서 PATCH 메소드는 API를 어떻게 구현하냐에 따라서 멱등성을 보장할 수도 있고 아닐 수도 있는 것이다.


✔ 참고자료

REST API란, HTTP Method
[ RESTful API] PUT과 PATCH의 차이 - 멱동성을 보장하는 PUT, 멱등성을 보장하지 않는 PATCH

profile
"Hello World"

0개의 댓글