인터넷에서 특정 자원을 나타내는 주소 값, 해당값은 유일하다.
( 응답은 달라질 수 있다. )
- 예시 )
- 요청 :
https://www.fastcampus.co.kr/resource/sample/1 - 응답 : fastcampus.pdf, fastcapmus.docx (다양한 형태로 여러 정보들이 올 수 있는 형태)
인터넷 상에서의 자원, 특정 파일이 어디에 위치하는지 식별하는 주소
- 요청 :
https://www.fastcampus.co.kr/fastcampus.pdf - url 주소 자체가 특정 서버, 특정 컴퓨터의 특정 폴더에 특정 파일이다. 즉 특정 위치를 나타내는 것이다.
- URI는 resource 정보가 변경될 수 있지만 URL은 특정 위치이기 때문에 변결될 수 없다.
- 따라서 URL은 URI의 하위 개념이다.
- 슬래시 구분자(/)는 계층 관계를 나타내는 데 사용한다.
- URI 마지막 문자로(/)는 포함하지 않는다.
- 하이픈(-)은 URI 가독성을 높이는데 사용한다.
- 밑줄(_)은 사용하지 않는다.
- URI 경로에는 소문자가 적합하다.
- @파일 확장자는 URI에 포함하지 않는다.
- @프로그래밍 언어에 의존적인 확장자를 사용하지 않는다.
- @구현에 의존적인 경로를 사용하지 않는다.
- @들을 사용하지 않는 이유는 URI에 파일 확장자를 추가할 때 해당 파일 특정 버전에 보안취약점이 생길 경우, 특정 언어에 문제가 있을 경우, 특정 구현에 필요한 프레임워크에 문제가 있을 경우 취약점이 되므로 외부에 노출하지 않는다.
- 세션 ID를 포함하지 않는다.
- 프로그래밍 언어의 Method명을 이용하지 않는다.
- 명사에 단수형보다는 복수형을 사용해야한다. 특히 컬렉션에 대한 표현은 복수로 사용
- 컨트롤러 이름으로는 동사나 동사구를 사용한다.
- 경로 부분 중 변하는 부분은 유일한 값(Path Valiable)으로 대체한다.
- CRUD 기능을 나타내는 것은 URI에 사용하지 않는다.
- URI Query Parameter 디자인
- URI 쿼리 부분으로 컬렉션 결과에 대해서 필터링 할 수 있다.
- 예시 ) ..../curriculums/web-master?chapter=2
- URI 쿼리는 컬렉션의 결과를 페이지로 구분하여 나타내는데 사용한다.
- 예시 ) .../curriculums/web-master?chapter=2&page=0&size=10&sort=asc
- API에 있어서 서브 도메인은 일관성 있게 사용해야 한다.
- 클라이언트 개발자 포탈 서브 도메인은 일관성 있게 만든다.