uri 설계시에 가장 중요한것은 리소스 식별이라고 한다!
여기에서 말하고 있는 리소스는 특정 행위가 아닌 명사를 의미한다.
만약, 회원가입이라는 기능이 있다며 가입이라는 액션이 아닌 회원이라는 명사만 리소스가 된다.
그런데 왜 리소스 식별이 중요한걸까?
왜냐하면 URI의 의미자체가 Uniform Resource Identifier(URI)이기 때문이다.
따라서 API URI를 설계할떄는 리소스를 기준으로 작성해야하며 액션은 빠져야한다.
그렇다면 회원가입, 회원조회, 회원수정, 회원삭제 같은 기능은 회원이라는 리소스를 사용하면서 액션은 어떻게 구분할까?
회원 조회 : /users/{id}
회원 등록 : /users/{id}
회원 삭제 : /users/{id}
회원 수정 : /users/{id}
정리하며느 URI는 리소스만 식별하고, 리소스와 그 리소스를 대상으로하는 액션은 분리되어야한다.
리소스 : 회원
행위 : 조회, 등록, 삭제, 변경 이라고 볼 수 있다.
그렇다면 액션은 어떻게 구분할수 있을까?
액션은 Http 메서드를 통해서 구분한다!!
GET : 리소스 조회
POST: 요청 데이터 처리, 주로 등록에 사용
PUT : 리소스 대체, 해당 리소스가 없으면 생성(덮어버림)
PATCH : 리소스 부분 변경(부분 변경)
DELETE: 리소스 삭제
이외에도 다양하게 존재한다.
리소스 조회시에 사용한다.
서버에 전달하고 싶은 데이터를 query를 통해서 전달한다.
get에서도 메시지 바디를 전달할 수 있지만, 지원하는곳이 많지 않아 권장되지 않는다고 한다.
요청 데이터 처리시에 사용한다.
메시지 바디를 통해서 서버로 요청 데이터를 전달한다.
서버는 요청 데이터를 처리한다.
주로, 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용된다고 한다.
POST는 매우 다양하게 사용될 수 있는데, 정리하면 아래와 같다.
리소스를 대체한다.
리소슥 있으면 대체하고 없으면 생성한다.(덮어버림)
POST와의 가장 큰 차이는 PUT은 리소스의 전체 의미를 모두 알고 있다.
POST는 전체 리소스 위치를 몰라도 된다.
PUT과 달리 리소스를 부분적으로 변경한다. PUT은 리소스를 완전히 대체한다.
리소스를 제거한다.
API URI를 설계할떄의 주의해야할점은 리소스 식별자만 사용해야한다.
그러나, 어쩔수없는 경우 동사를 사용할 수 있는데 이를 컨트롤 URI라고 부른다.(POST)
어쩔수 없는 경우는 보통 HTML Form을 사용하는 경우인데, HTML Form을 사용하는 경우는 GET, POST만 지원하기 떄문에 DELETE 같은 Http 메서드 사용이 불가능하기 때문에 POST로 동사를 지정해서 컨트롤 URI를 사용한다.
해당 포스팅은 아래의 강의를 공부 후 개인적으로 정리한 내용입니다.
김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식