우리가 API를 개발할 때 가장 중요한 것은 리소스 식별 이다.
그렇다면 리소스의 의미는 무엇?
그러면 어떻게 식별하는 게 좋아?
API URI 설계할 때 리소스 식별, URI 계층 구조를 활용하자
리소스와 행위를 분리하라?
URI는 리소스만 식별
리소스는 명사, 행위는 동사
GET
POST
새 리소스 생성(등록)
요청 데이터 처리
다른 메서드로 처리하기 애매한 경우
PUT
리소스를 대체
클라이언트가 리소스를 식별
있는 경우 리소스를 대체. 리소스를 완전히 대체해버린다.
없으면 생성한다.
🎯 PUT은 수정이 아니라 완전히 갈아치우는 것.
리소스 부분 변경은 PATCH를 사용한다.
PATCH
DELETE
안전
안전이란? 호출해도 리소스를 변경하지 않는다. Get은 안전하다. 왜? 조회만 하는거라서.
멱등
멱등은 한 번 호출하든 두 번 호출하든 100번 호출하든 결과가 똑같아야한다.
멱등 메서드로는 GET, PUT, DELETE가 있다.
GET : 한 번 조회하든, 두 번 조회하든 같은 결과가 조회된다.
PUT : 결과를 대체한다. 따라서 같은 요청을 여러번 해도 최종 결과는 같다.
DELETE : 결과를 삭제한다. 같은 요청을 여러 번 해도 삭제된 결과는 똑같다.
⚔️ POST : 멱등이 아니다!!! 두 번 호출하면 같은 결제가 중복해서 발생할 수 있다.
🎯 요청을 하다가 중간에 PUT으로 인해 리소스가 변경이 되면 이 PUT에 의해 리소스가 변경 돼서 GET를 할 경우 변경된 리소스를 반환할 것이다. 이럴 때도 멱등하다고 볼 수 있을까? 멱등은 외부 요인으로 중간에 리소스가 변경되는 것까지는 고려하지 않는다!!!
캐시가능
응답 결과를 캐시에서 사용할 수 있는가?
: 웹브라우저에 이미지를 요청 했을 때 이렇게 한 번 요청을 했다면 또 같은 이미지를 요청할 필요가 없다. 이 때 내 웹브라우저 PC 내부에 이미지를 저장하고 있다. 이걸 캐시라고 한다. 물론 여러 가지가 있다. 즉, 웹브라우저가 내부에 이 이미지를 저장하고 있을 수 있냐 없냐... GET, HEAD, POST, PATCH 캐시 가능하다.
하지만 실제로는 GET, HEAD 정도만 캐시로 사용한다.