
- 리소스를 대체
- 리소스가 있으면 대체, 리소스가 없으면 생성
- 클라이언트가 리소스를 식별한다!
- 클라이언트가 리소스 위치를 알고 URI를 지정한다.
- POST와의 가장 큰 차이점.
➡️ POST의 경우, 요청 메세지에서 path를
/members까지만 지정한 후, 요청 메세지를 받은 서버에서 신규 리소스 식별자를 생성해 넘겨주어야만 정확한 리소스의 위치를 알 수 있다.

요청 메세지의 URI에 해당하는 리소스가 이미 존재하는 경우, 요청 메세지 내 메세지 본문에 들어있는 데이터가 이미 존재하던 리소스를 완전히 대체한다.

요청 메세지의 URI에 해당하는 리소스가 존재하지 않는 경우, 해당 URI에 리소스를 생성한다.
이때 리소스를 "완전히 대체" 한다는 것이 중요하다. 다음과 같은 예시를 보자.
PUT 요청 메세지를 보내는 URI에 존재하는 리소스를 보면 username과 age, 이렇게 두 개의 필드가 존재한다. 이와 달리 요청 메세지의 메세지 본문에 보내는 데이터는 age 하나만 가지고 있는 것을 확인할 수 있다.
클라이언트가 서버에게 PUT 요청 메세지를 보냈을 때 리소스를 완전히 대체하기 때문에, 해당 URI에 새롭게 생성된 메세지를 보면 username 필드가 삭제되고 age 필드만 있는 것을 확인할 수 있다.
만약 사용자의 의도가 리소스를 완전히 대체하는 것이 아니라 필드 일부분의 값 변경이었다면, PUT이 아니라 PATCH를 사용해야 한다.
- 리소스의 일부분을 변경
- PATCH 요청 메세지의 형태
PATCH를 사용한 요청 메세지를 보자.
사용자의 의도는 age 필드의 값을 50으로 변경하기 위함이다.
클라이언트와 위와 같이 PATCH 요청 메세지를 보내면, 서버에서 이를 받아 리소스의 부분만 변경하는 것을 확인할 수 있다.
일부 서버에서 PATCH 지원이 안될 가능성도 있는데, 그때는 POST를 사용하면 된다. (POST는 무적! ⭐️)
- 리소스 제거
DELETE 요청 메세지를 보내면 서버는 해당 리소스를 삭제하게 된다.
- 안전(Safe Methods)
- 멱등(Idempotent Methods)
- 캐시 가능(Cacheable Methods)

"서버가 TIMEOUT 등으로 정상 응답을 못주었을 때, 클라이언트가 같은 요청을 다시 해도 되는가?" 에 대한 판단 근거가 될 수 있다.