URI 를 설계 할때 주의할 점은 리소스 자체에 집중해야 한다는거다. 예를들어서 "회원을 조회한다" 의 리소스는 "회원" 이다. "조회" 한다는 행위는 리소스가 아니다. 그럼 여기서는 "회원" 을 URI 에 반영을 해야한다. 하지만 설계를 하면 다음과 같은 문제가 생긴다. 회원 등록,수정,삭제... 아니 모두 다 같은 URI를 가지는데???
그래서 이러한 "행위" 를 표현하기 위해서, HTTP 메서드 즉 GET,POST... 등으로 구분을 할거다
리소스를 조회할 때 사용한다. 서버에 전달하고 싶은 데이터를 쿼리 파라미터를 통해서 전달한다. 그러면 서버는 해당 내부 DB를 조회해서 응답메세지 지를 작성해서 전달한다.
메세지 바디를 통해 서버로 요청 데이터를 전달한다. 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용한다.
기존 리소스가 있다면 완전히 대체를 하고 리소스가 없다면 새로 생성을 한다. 따라서 PUT의 경우에는 클라이언트가 구체적인 리소스 위치를 알고 있어야 한다. 아래 사진에서 members/100 이런거처럼!!
클라이언트가 리소스 위치를 알고 URI 를 지정 → POST와 차이점!
❋주의점
만약 기존데이터가 username , age 인데 put 요청을 보낼 때 age 만 보내면 기존 데이터의 username 은 null 이되고 age만 put 요청으로 들어온 값으로 바뀌게 된다.
PUT 의 완전히 대체된다는 성질 때문에 수정을 할 때는 번거로움이 따랐다고 한다. 그래서 나온게 PATCH 이다. 뭔가 부분적으로 바꾸고 싶을 때는 PATCH 를 사용하면 된다. 그럼 위에 사진에서 age 만 바뀌게 된다.
리소스를 제거할 때 사용하는 메서드
위키에서 http 를 검색하면 다음과 같은 표가 나오는데 한번 정리를 해보자
호출해도 리소스를 변경하지 않는다. ex)GET
한번 호출하든 여러번 호출하든 결과가 똑같아야 한다. 그럼 이 개념이 왜 필요 하냐면 장애가 발생했을 때 어떻게 처리를 할지에 대한 판단 근거이다. 예를 들어서 장애가 발생해서 TIME-OUT 이 발생했다면 어떻게 조치를 해야 할까? 멱등이 성립한다면 재요청을 하면 된다.
POST 의 경우 멱등이 아니다. 결제 요청같은 경우 두번 호출하면 중복 결제가 발생할 수도 있다
응답 결과 리소스를 캐시해서 사용해도 되는가이다. GET, HEAD 의 경우 URL만 캐시 키값으로 하여 캐시가능이고. POST, PATCH 의 경우 본문 내용까지 캐시의 키값이 될 수 있는지 판단해야 하므로 잘 사용하지 않는다.