
URI (Uniform Resource Identifier)는 웹에서 자원을 고유하게 식별하기 위한 주소임.
URI 설계는 RESTful API의 성공적인 구현을 위한 핵심 요소임.
명확하고 일관된 URI 설계를 통해 자원을 쉽게 식별하고 서비스의 신뢰성과 사용성을 높일 수 있음.
우리가 웹 서비스를 이용할 때, 서버와 클라이언트는 다양한 데이터를 주고받음.
이 데이터는 HTML, CSS, 이미지, 오디오, 비디오 등으로 구성되며, 이를 자원(Resource)이라고 부름.
URI는 이러한 자원 각각을 명확히 식별하여 접근할 수 있도록 만들어 줌.
REST에서 URI는 특정 자원을 식별하는 데 필수적인 요소임.
H열/11과 같은 형식을 사용하면 11번 좌석을 명확히 식별할 수 있음.좌석 예매 시스템과 유사
URI: /seats/h열/11
의미: H열 11번 좌석
잘 설계된 URI는 자원의 형식과 식별 방식을 명확히 보여줌.
URI 설계에서 고려해야 할 주요 요소는 다음과 같음.
| 원칙 | 설명 |
|---|---|
| 자원의 명확성 | URI만 보고도 어떤 자원을 가리키는지 쉽게 알 수 있어야 함. |
| 단수형과 복수형 사용 | 자원이 한 개인지 여러 개인지를 명확히 구분해야 함. |
| 계층 구조 활용 | 자원의 위치를 계층적으로 나타내는 구조가 직관적임. |
| 일관성 유지 | URI 설계 방식은 서비스 전체에서 일관되게 유지되어야 함. |
| 예측 가능성 | URI를 통해 관련된 API 작업을 쉽게 예상할 수 있어야 함. |
잘못된 URI:
/seats
잘 설계된 URI:
/seats/hr/11
/user/1 (특정 사용자 1명) /users (사용자 목록 전체) 잘못된 URI: /tickets_and_seats
잘 설계된 URI:
/theaters/hr/seats/11/tickets
| 규칙 | 설명 | ✅ 올바른 예시 | ❌ 잘못된 예시 |
|---|---|---|---|
| 명사 사용 | 자원을 나타내는 명사로 표현 | /members | /get-member-list |
| 복수형/단수형 | 목록은 복수형, 단일 자원은 단수형 | /members(목록)/members/1(단일) | - |
| 계층 구조 | 슬래시(/)로 계층 관계 표현 | /articles/1/comments | - |
| 소문자 사용 | 전체 URI는 소문자로 작성 | /articles/top-voted | /articles/topVoted |
| 띄어쓰기 | 하이픈(-)으로 표현 | /user-profiles | /user_profiles |
| 규칙 | ✅ 올바른 방식 | ❌ 잘못된 방식 |
|---|---|---|
| 마지막 슬래시 | /articles/1 | /articles/1/ |
| 파일 확장자 | /articles | /articles.json |
| 동작 표현 | DELETE /members/1PUT /members/2 | /members/1/delete/members/2/update |
| 필터링 | /articles?category=tech&sort=latest | /get-tech-articles-sorted |
/articles # 전체 게시글
/articles/1 # 1번 게시글
/articles/1/comments # 1번 게시글의 댓글들
/articles/1/comments/2 # 1번 게시글의 2번 댓글
/articles?status=published # 발행된 게시글
/members?role=admin&active=true # 활성 관리자
/products?category=electronics&price=asc # 전자제품 가격순 정렬