(3) URI 설계 패턴

728x90
URI 란 인터넷에서 특정 자원을 나타내는 주소 값으로 해당 값은 유일하다.
ex) 요청(req) : https://www.naver.com/resource/sample/1
      응답(res) : na.test.pdf, na.test.docx

URL 과 URI 를 헷갈리지 말자, URL 은 URI 의 하위 개념으로 인터넷 상에서의 자원, 특정 파일이 어디에 위치하는지 식별 하는 주소이며

요청(req) : https://www.naver.com/na.test.pdf 이런식으로 발행된다. 


URI 설계 원칙

1. 슬래시 구분자(/) 는 계층 관계를 나타내는 데 사용한다.
https://naver.com/na/ja/cur/tes

2. URI 마지막 문자로 (/) 는 포함하지 않는다.
https://naver.com/na-bcd-ef/ja/cur/tes-t/ (X)

3. 하이폰(-) 은 URI 가독성을 높이는데 사용한다.
https://naver.com/na-bcd-ef/ja/cur/tes-t

4. 밑줄(_) 은 사용하지 않는다.
https://naver.com/na_bcd_ef/ja/cur/tes-t (X)

5. URI 경로에는 소문자가 적합하다.
https://naver.com/NA-BCD-EF/ja/cur/tes-t (X)

6. 파일 확장자에는 URI 에 포함하지 않는다.
https://naver.com/na-bcd-ef/ja/cur/tes-t.pdf (X)

7. 프로그래밍 언어에 의존적인 확장자를 사용하지 않는다.
https://naver.com/na-bcd-ef/ja/cur/tes-t.do (X)

8. 구현에 의존적인 경로를 사용하지 않는다.
https://naver.com/servlet/classes/java/cur/tes-t (X)

9. 세션 ID 를 포함하지 않는다.
https://naver.com/na-bcd-ef/ja/cur/tes-t?session-id=abcdef (X)

10. 프로그래밍 언어의 메소드 명을 이용하지 않는다.
https://naver.com/na-bcd-ef/ja/cur/tes-t?action=intro (X)

11. 명사에 단수형 보다는 복수형을 사용해야 한다. 컬렉션에 대한 표현은 복수로 사용
https://naver.com/classes/ja/curriculums/tes-t

12. 컨트롤러 이름으로는 동사나 동사구를 사용한다.
https://naver.com/classes/ja/curruculums/tes-t/re-order

13. 경로 부분 중 변하는 부분은 유일한 값으로 대체한다.
생략.../curriculums/java/lessons/{lesson-id}/users/{user-id}
생략.../curriculums/java/lessons/2/users/100

14. CRUD 기능을 나타내는 것은 URI 에 사용하지 않는다.
GET: 생략.../curriculums/java/lessons/2/users/100/READ (X)
DELETE : 생략.../curriculums/java/lessons/2/users/100 (O)

15. URI Query Parameter 디자인
URI 쿼리 부분으로 컬렉션 결과에 대해서 필터링 할 수 있다.
생략.../curriculums/java?chapter=2

16. URI 쿼리는 컬렉션의 결과를 페이지로 구분하여 나타내는 데 사용한다.
생략.../curriculums/java?chapter=2&page=0&size=10&sort=asc

17. API 에 있어서 서브 도메인은 일관성있게 사용해야 한다.
https://naver.com
https://api.naver.com
https://api-naver.com

18. 클라이언트 개발자 포탈 서브 도메인은 일관성있게 만든다.
https://dev-naver.com
https://developer-naver.com

728x90