ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • REST API (path parameter, query parameter)
    Server 2022. 11. 20. 21:10

    WHAT REST

     

    - REST : Representational State Transfer의 약어(상태를 전달하는 것을 나타내는 방법)

    - 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 것을 의미

    - [구성]

     1) 자원(Resource) - URI(Uniform Resource Indentifier)

     2) 행위(Verb) - HTTP METHOD

     3) 표현(Representations)

     

    WHAT API

    - Application Programming Interface의 약어

    - 정보 사용자가 원하는 것에 도달할 수 있도록 한 인터페이스

    - 애플리케이션 소프트웨어의 구현 방식을 몰라도 사용자는 API를 통해 사용 가능

    - 정보 제공자와 정보 사용자 간 소통하기 위한 하나의 인터페이스 장치

     

    WHAT REST API

    - REST를 기반으로 서비스 API를 구현한 것

    - RESTful하다 --> REST 구조 스타일로 API가 이루어진 서비스

     

    [URI 기본 설계 규칙]

    1. 슬래시 구분자(/)는 계층 관계를 나타낼 때 사용

    2. URI 마지막 문자로 슬래시(/)를 포함하지 않음

    3. 밑줄(_) 대신 하이픈(-) 사용

    4. URI경로는 소문자로만 작성

    5. 파일 확장자는 URI에 미포함

    6. CRUD 행위(verb)는 포함하면 안됨

     

    [리소스 원형 종류]

     1. 도큐먼트 : 데이터베이스의 row 단위 또는 리스트 컬렉션의 하나의 객체단위로 단일 정보를 포함하고 있는 데이터

     2. 컬렉션 : 도큐먼트들의 집합. 관리주체는 서버이고 컬렉션은 클라이언트 단에서 새로운 리소스를 제안해서 올릴 수도 있지만 결정은 서버가 한다.

     3. 스토어 : 컬렉션과 같이 도큐먼트들의 집합이며 관리주체는 클라이언트. 클라이언트는 기존의 리소스를 스토어에 추가하거나 삭제,변경할 수 있다.

     4. 컨트롤러 : 컬렉션, 스토어의 메서드(함수)기능. HTTP METHOD(CRUD)를 제외한 특정 기능을 요구할 때 사용.

     

    리소스 원형을 url에 표현할 때, 도큐먼트는 단수 명사로 표현하고, 컬렉션과 스토어는 복수 명사를 사용해야하고 컨트롤러는 동사여야 한다.

     

    Path Parameter

    URL은 고유한 자원을 지칭할 수 있다. 그런데, URL중 컬랙션 내의 특정 도큐먼트를 식별하고자 할 때, 그 도큐먼트를 변수처럼 지정하요 사용할 수 있는데 이 변수의 이름을 path parameter라고 한다. 보통 어떤 resource를 식별하고 싶을 때 사용한다.

     

    [예시]

    → https://map.naver.com/v5/entry/place/:placeId

    • https://map.naver.com/v5/entry/place/11583199
    • https://map.naver.com/v5/entry/place/1353885407
    • https://map.naver.com/v5/entry/place/12017005

     

    Query Parameter

    Query Parameter는 url에서 특정한 조건을 주고 싶을 때 사용하는 매개변수 유형이다. URL 끝에 물음표(?)뒤에 나타나며, and 기호(&)로 구분된 '이름=값' 쌍으로 구성된다. 보통 GET, DELETE 요청에서만 사용하고 유일한 값을 식별하기 위한 용도가 아닌 옵션을 줄때 사용한다.

     

    [사용]

    - 데이터 필터링

    - 데이터 정렬

    - 데이터 수 조절(페이지네이션)

    - 검색 등

     

    1. 필터링

     

    2. 정렬

     

    3. 데이터 수 조절(Pagenation)

    데이터베이스에 저장된 모든 데이터를 클라이언트가 한 번에 모두 호출하여 사용하면 통신 속도가 매우 저하될 수 있다. 그래서 한 번에 필요한 만큼만 데이터를 호출하는 것이 효율적이다. 이런 상황에서 필요한 데이터의 시작점과 끝 점을 쿼리 스트링을 통해 전달할 수 있는데,

    관습적으로 데이터의 시작점을 "offset", 주고 받고자 하는 데이터의 개수를 "limit"으로 정한다고 한다.

     

     

    4. 검색

    데이터베이스에 저장된 데이터에서 필요한 정보 객체를 특정 키워드로 "필터링"할 때 사용한다. 통상적으로 "search"라는 키워드를 사용한다.

    [예시]

    • [GET] /products?price=3000
    • [GET] /products?ordering=-id
    • [GET] /products?offset=0&limit=100
    • [GET] /products?serach=홍길동

    Query Parameter를 이용해 생성된 위 4가지 API는 기본적으로 [GET]/products와 동일한 API를 호출하는 내용이다. 따라서 API는 하나로 작성되어야 하고 query string을 변수로 받아서 각각의 조건마다 필요한 데이터를 전송해야 한다.

     

    만약 path parameter를 통해 [GET]/products/1 API를 만들게 된다면 [GET]/products API와는 다른 API로 만들어야 된다는 점을 잊으면 안된다.

     

    또한, query parameter에 대해 클라이언트에서 값을 주지 않을 때를 대비해서 기본값(default)을 설정할 수 있고

    동일한 키의 값으로 여러 값을 전달할 경우, 서버에서는 배열로 값을 받을 수 있다.

    • [GET] /products?size=230&size=240&size=280 → { size : [230, 240, 280] }

     

    [실제 사용 예시 - 무신사]

    https://www.musinsa.com/categories/item/001?d_cat_cd=001&brand=&list_kind=small&sort=pop_category&sub_sort=&page=2&display_cnt=90&group_sale=&exclusive_yn=&sale_goods=&timesale_yn=&ex_soldout=&kids=&color=&price1=&price2=&shoeSizeOption=&tags=&campaign_id=&includeKeywords=&measure=

     

     

    'Server' 카테고리의 다른 글

    HTTP 상태코드 정리  (0) 2022.12.23
    API METHOD PATCH vs PUT  (0) 2022.11.15
    백엔드 API 패턴 - Layered Architecture  (0) 2022.11.15
    [생활코딩] Home Server  (0) 2022.10.01

    댓글