WWW(World Wride Web, W3)은 인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보공간
컴퓨터나 컴퓨터 프로그램 사이의 연결
REST 아키텍처 스타일을 따르는 API
자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것
웹기반의 REST에서는 리소스 접근할때 URI 사용
https://www.test.co.kr/user/100
user
100
예를들어 API의 리소스 식별자를 중복 없이 고유하게 잘 만들고, 해당 API에 적절하게 HTTP 메서드를 사용했다면, RESTful하게 설계했다고 볼 수 있다!
htts://www.test.co.kr/resource/1
yummy.pdf
htts://www.test.co.kr/yummy.pdf
슬래시 구분자 /
는 계층관계를 나타내는데 사용한다.
https://www.test.co.kr/classes/java/curriculums/web-master
✅
URI 마지막문자로 /
는 포함하지 않는다
https://www.test.co.kr/classes/java/curriculums/web-master/
❌
하이픈 -
은 URI 가독성을 높이는 데 사용한다.
https://www.test.co.kr/classes/java/curriculums/web-master
✅
밑줄 _
은 사용하지 않는다.
https://www.foo.co.kr/classes/java/curriculums/web_master
❌
URI 경로에는 소문자가 적합하다.
https://www.test.co.kr/classes/JAVA/curriculums/web-master
❌
파일 확장자는 URI에 포함하지 않는다.
https://www.test.co.kr/classes/java/curriculums/web-master.jsp
❌
프로그래밍 언어에 의존적인 확장자를 사용하지 않는다.
https://www.test.co.kr/classes/java/curriculums/web-master.do
❌
구현에 의존적인 경로를 사용하지 않는다.
https://www.test.co.kr/servlet/classes/java/curriculums/web-master
❌
세션 ID를 포함하지 않는다.
https://www.test.co.kr/classes/java/curriculums/web-master?session-id=abcdef
❌
프로그래밍 언어의 Method명을 이용하지 않는다.
https://www.test.co.kr/classes/java/curriculums/web-master?action=intro
❌
명사에 단수형보다는 복수형을 사용해야 한다.(컬렉션에 대한 표현은 복수)
https://www.test.co.kr/classes/java/curriculums/web-master
✅
컨트롤러 이름은 동사나 동사구를 사용한다.
https://www.test.co.kr/classes/java/curriculums/web-master/re-order
✅
경로 부분 중 변하는 부분은 유일한 값으로 대체한다.
/curriculums/web-master/lessons/{lesson-id}/users/{user-id}
/curriculums/web-master/lessons/2/users/100
✅
CRUD 기능을 나타내는 것은 URI에 사용하지 않는다.
/curriculums/web-master/lessons/2/users/100/read
❌/curriculums/web-master/lessons/2/users/100
✅URI Query Parameter 디자인
/curriculums/web-master?chapter=2
✅
URI 쿼리는 컬렉션의 결과를 페이지로 구분하여 나타내는 데 사용한다.
/curriculums/web-master?chapter=2&page=0&size=10&sort=ac
✅
API에 있어서 서브도메인은 일관성 있게 사용해야 한다.
https://www.test.co.kr
https://api.www.test.co.kr
✅
https://api-www.test.co.kr
✅
클라이언트 개발자 포탈 서브 도메인은 일관성있게 만든다.
https://dev-www.test.co.kr
✅
https://developer-www.test.co.kr
✅