HTTP METHODS
GET : 서버의 특정 리소스의 정보 요청
HEAD : GET와 동일하지만 HEADER 만 있고, BODY가 비어있음. 리소스가 있는지 없는지 체크만 하고 싶을때, 정보가 수정됬는지 확인하고 싶을 때 사용한다.
PUT : 서버의 특성 위치의 리소스 정보 전체 수정
PATCH : PUT가 동일하지만 PATCH는 부분만 수정한다.
DELETE : 해당 리소스 삭제 요청
POST : 해당 리소스로 DATA를 전송해서 데이터를 생성
OPTIONS : 해당 리소스에 가능한 HTTP Method 출력
TRACE : 가장 최근에 들어온 Method 그대로 실행
이들을 한번 특성으로 나눠보겠다.
Idempotent (멱등성)
멱등성의 사전적의미는 몇번이고 같은 연산을 반복해도 같은 값이 나온 다는 것이다.
즉 수식으로 나타내면 f(x) = f(f(x)) = f(f(f(x))) ....
GET PUT DELETE는 idempotent하다.
Get 을 아무리 여러번 하더라도 똑같은 결과를 리턴한다.
PUT DELETE 도 마찬가지다.
하지만 POST는 다르다. 같은 데이터를 전송해줘도 POST 할 URL 를 명시하지 않았기 떄문에 매번 다른 위치에 데이터가 POST 된다.
(애초에 리소스의 위치가 url 정보에 들어가지도 않음)
Safety
Safe Method는 리소스를 수정하지 않고, Unsafe Method는 리소스를 수정한다.
GET은 Safe 하다. 반면, DELETE, POST, PUT은 safe 하지 않다. (readonly 같은 개념이라고 생각하면 될거 같다.)
PUT VS POST
POST는 idempotent하지 않음(같은 요청을 2번 보내면 각기 다른위치에 리소스가 저장한다.) + 클라이언트는 서버의 리소스의 위치를 알지 못함
PUT는 idempotent함(2개의 자원을 보낸다 하더라도 1개의 자원만 생성할것임) => 클라이언트는 리소스의 위치를 알음으로 갱신 가능
PUT VS PATCH
PUT은 리소스 전체를 수정한다. 입력하지 않은 데이터는 NULL 값이 들어간다.
PATCH는 리소스의 일부만 수정한다. 입력받은 데이터에 대해서만 값이 들어간다.