URI

henry·2024년 7월 14일
0

통합 자원 식별자(Uniform Resource Identifier, URI)는 인터넷에 있는 자원을 나타내는 유일한 주소입니다. URI의 존재는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에 항상 붙어 다닙니다. URI의 하위 개념으로 URL과 URN이 있습니다.

통합 자원 식별자(Uniform Resource Identifier, URI)는
인터넷에 있는 자원을 나타내는 유일한 주소이다.
URI의 존재는 인터넷에서 요구되는 기본조건으로서
인터넷 프로토콜에 항상 붙어 다닌다.
URI의 하위개념으로 URL,URN이 있다.
- 위키백과 -

URI는 로케이터(locator) → URL , 이름(name) → URN, 또는 둘 다 추가로 분류될 수 있습니다.


RFC 표준 스펙


Uniform Resource Identifier (URI): Generic Syntax Status of This Memo This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (2005). Abstract A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.


출처 : https://www.ietf.org/rfc/rfc3986.txt



URI : 리소스 식별

  • Uniform:리소스를 식별하는 통일된 방식

  • Resource : 자원, URI로 식별할 수 있는 모든 것

  • Identifier: 다른 항목과 구분하는데 필요한 정보



URL : 리소스의 위치

  • 리소스가 있는 위치를 지정



URL 문법

scheme:// [userinfo@] host [:port][/path] [?query][#fragment]

scheme프로토콜 정보
host도메인 명
[userinfo@]일반적으로 생략(생략 시 http : 80포트 https : 443포트)
[/path]리소스가 있는 경로, 계층적 구조로 구성 예시) /home/file1.jpg, /members, /members/100, /items/iphone12
[?query]key=value형태로 data삽입, '?'시작, '&'로 추가 query parameter, query string등으로 불림
[#fragment]html내부 북마크 등에 사용 (서버로 전송되는 정보는 아님)

URL 예시


URN : 리소스의 이름

리소스에 이름을 부여(위치는 변해도 이름은 변하지 않습니다.)
URN만으로 실제 리소스를 찾을 방법이 보편화 되어 있지 않습니다.

URN 예시

  • urn:isbn:0451450523:
    • urn: URN 스킴
    • isbn:0451450523: ISBN 번호를 이용한 책 식별자- #fragment: 프래그먼트



API URI 설계

  • 회원 목록 조회 - readMemberList
  • 회원 조회 - readMemberById
  • 회원 등록 - createMember
  • 회원 수정 - updateMember
  • 회원 삭제 - deleteMember

URI설계에서 가장 중요한 것은 "리소스 식별"
여기서 리소스는 (조회, 등록, 수정, 삭제)라는 동작이 아닌 '회원'이라는 개념 자체이다.

→ 회원을 '등록' , '수정' , '조회'하는 동작은 모두 배제
→ '회원'이라는 '리소스'만 식별하면 됩니다.

그렇다면, 리소스를 식별하고, 계층 구조로 작성해보겠습니다.

  • 회원 목록 조회 - /members
  • 회원 조회 - /members/{id}
  • 회원 등록 - /members/{id}
  • 회원 수정 - /members/{id}
  • 회원 삭제 - /members/{id}

( 계층 구조상 상위를 컬렉션으로 보고 복수단어 사용을 권장합니다. ( ex : member → members )

회원(members)가 resource인 것은 알겠지만 '동작'의 구분이 되질 않습니다.



리소스와 행위를 분리

리소스 자체를 식별하는 것:

  • 리소스: 회원
  • 행위: 조회, 등록, 삭제, 변경
  • 리소스는 명사로, 행위(메서드)는 동사로 구분합니다.
  • 행위(메서드)는 HTTP 메서드(GET, POST, PUT, DELETE)가 이 역할을 대신해줍니다.

리소스는 명사로, 행위(메서드)는 동사로 구분합니다.
행위(메서드)는 HTTP 메서드(GET, POST, PUT, DELETE)가 이 역할을 대신해줍니다.

  • GET /members : 회원 목록 조회
  • GET /members/{id} : 회원 조회
  • POST /members : 회원 등록
  • PUT /members/{id} : 회원 수정
  • DELETE /members/{id} : 회원 삭제

0개의 댓글