HTTP 메서는 3가지 속성을 가집니다. 다음은 9개의 메서드에 대한 요약표입니다.
안전은 메서드를 통해 호출해도 리소스를 변경하지 않는다는 의미입니다.
(요청한 리소스에 대해서만 고려하기 때문에 로그 쌓는 데이터는 고려대상은 아닙니다.)
GET, HEAD, OPTIONS, TRACE
가 해당합니다.
멱등은 호출 횟수와 상관없이 결과가 동일하다는 의미입니다.
안전
속성을 가지는 메서드들은 리소스를 변경하지 않기 때문에 멱등이며
주의깊게 볼것은 PUT과 DELETE입니다.
PUT의 쓰임은 데이터가 없으면 생성하고, 있으면 요청 데이터로 완전히 덮어버리는것입니다.
그렇기 때문에 몇번을 요청해도 요청 데이터로 덮어쓰기 때문에 멱등입니다.
delete는 데이터를 삭제합니다. 이미 삭제된 데이터를 삭제하려고 해도 삭제되었기 때문에 멱등입니다.
POST는 멱등이 아닙니다. 호출할때 마다 새로운 프로세스가 진행될 수 있습니다.
예를 들어) 중복 결제로, 배달이 두번 오는 경우가 여기에 해당합니다.
캐시 가능은 응답 결과의 캐시 여부를 의미합니다.
GET, HEAD, POST, PATCH가 해당합니다.
실제로는 GET, HEAD 정도만 캐시로 사용합니다.
POST, PATCH는 본문 내용까지 캐시 키로 고려해야하는데 구현이 쉽지 않습니다.