URI란?
인터넷에서 특정 자원을 나타내는 주소 값, 해당 값은 유일하다.
만약, 내가 값을 받기 위해 URI를 내 맘대로 작명하고 바꾸며 개발을 한다면? 혼자 일할 때도 다른 리소스의 URI를 예상할 수 없고 찾아보며 시간도 많이 들고 작명할 때마다 혼란이 올 것이다... 끔찍하다.
HTTP URI 설계는 어떤 서비스인지 이해할 수 있게 설계하여야 하며, 또한 모든 설계의 일관성을 유지하는 것이 중요하다.
URI 설계에서 알아야 할 개념은 문서, 컬렉션, 스토어, 컨트롤러 URI로 크게 4가지다.
문서에서는 단일 개념을 표현한다.
객체 인스턴스나 데이터베이스 row를 나타낸다.
예시)
회원일 경우 /members라고 표현
주문일 경우 /orders라고 표현
서버가 관리하는 리소스 디렉토리를 의미한다.
서버가 리소스의 URI를 생성하고 관리한다.
*서버가 리소스의 URI를 생성은 언제하지?
클라이언트는 등록할 리소스의 URI를 모른다.
클라이언트가 서버에 리소스를 요청(POST 메서드 호출)하고 서버는 관련 리소스 URI를 생성 해준다.
회원등록의 경우 클라이언트가 서버에게 /members로 리소스를 요청한다.
이후 서버가 /members/특정값 의 URI를 생성해준다.
여기에서 컬렉션은 /members다.
클라이언트가 관리하는 리소스 저장소를 의미한다.
클라이언트가 리소스의 URI를 알고 관리한다.
*클라이언트가 리소스의 URI를 알고 관리한다는건?
클라이언트가 직접 리소스를 지정한다.
리소스 URI를 직접 알고 등록한다라는 말과 같다.
파일 등록을 할 때 파일의 이름을 클라이언트가 알고 등록한다.
/files/특정파일이름
여기에서 스토어는 /files이다.
설계가 커지면 문서, 컬렉션, 스토어만을 사용해서 URI 설계하기 어려워진다.
문서, 컬렉션, 스토어로 해결하기 어려운 경우 동사를 직접 사용하여 표현한다.
/orders/특정값/delivery