Wecode - Project 2 (부트캠프)/세션

Project 2- 2일 차: [API]세션(2) Query Parameter

Queen Julia 2023. 9. 20. 12:50

index는 정적인 거 , 미리 걸어놓는거

transaction은 commit하나라도 안 되면 안 되는 거 

 

검색을 효율적으로 하게 하는 거. 

 

 

Project 2 - 2일차 : [Restful API] 세션 (path부터 다시)**

앞으로는 restful api 엄격하게 add, create 가 들어가지 않게 리뷰해서 main branch에 들어가지 않게끔. main branch에는 엄격하게 지켜져야 함 호출할 때, 프론트가 json body에 담아서 가져가는게 아니라, 프

pm-developer-justdoit.tistory.com

 

Project 2- 2일 차: [API]세션(1) Path parameter

Project 2 - 2일차 : [Restful API] 세션 (path부터 다시)** 앞으로는 restful api 엄격하게 add, create 가 들어가지 않게 리뷰해서 main branch에 들어가지 않게끔. main branch에는 엄격하게 지켜져야 함 호출할 때,

pm-developer-justdoit.tistory.com

path = 특정한 값/데이터 뽑을 때 

query = 옵션을 줄 때 (filter/order정렬/pagination/searching 검색)


Query Parameter

1. query parameter란?

 

url에서 특정한 데이터가 아닌,

특정한 조건(option)을 주고 싶을 때

사용하는 매개변수 유형

 

같은 API를 호출한다고 해도,

다른 옵션/서로 다른 조건으로 나열하는 것이 필요한 상황에 사용

 

2. 작성법

2-1.  URL 끝, 물음표(?) 뒤에 조건

 

2-2. 2개 이상의 조건/옵션일 경우,

2-2-1. &로 연결,

2-2-2. '이름=값'쌍으로

 

Ex.

'같은 신발'

목록 데이터를 호출 하는데,

  • 신상품 순 (order)
  • 사이즈가 230인 데이터만 따로 (option- filtering, searching 검색)
  • 사이즈가 250인 제품 따로 (option- filtering, searching 검색)
  • 낮은 가격순 (order)

같은 상품인데,

다른 조건이라고 해서 데이터 호출하는 API를

매번 새로 생성하는 것은 비효율적

 

필요한 조건을

요청에 따라 선택적으로 처리할 수 있는

통일된 API를 구성할 때 사용

 

3. Query Parameter의  HTTP Method ; [GET] [Delete] method 

[GET], [DELETE] 요청에서만 사용

 

4. when to use?

특정한 데이터/값을 식별하기 위한 용도(=path parameter)가 아닌,

조건/option을 줄 때 

  • data filtering [GET] method 
  • data ordering 정렬  [GET] method 
  • data pagination 수 조절  [GET] method 
  • data searching 검색  [GET] method 
filtering/ordering/pagination/searching : 실시간으로 하는 거고,

index/searching은 설정이 그런거고, 
미리 동적으로 걸어주는 게 Index, transaction 

 

4-1.  filtering  ; [GET] method 

[GET] method

product list

제품의 전체 목록 페이지

 

searching(특정 필터 기준으로 검색)과 동일한 기능 

 

다양한 상황

  • 제품 가운데 가격이 3000원인 데이터만을 전송 (product?price=3000)
  • 제품 가운데 가격이 3000원이면서, 동시에 이름이 ‘사과'인 데이터만을 전송  (product?price=3000&name=사과)

상품의 price= 3000 을 필터링해서 가져온다 (get)

상품의 price = 3000 & product_name = 사과 를 필터링해서 가져온다 (get)

* query parameter의 '&' 연산자
필터링 조건/option을 '이어 나열'할 때
필터링 조건이 늘 'and ~이고'  뜻이 아님

API를 어떻게 작성하느냐에 따라
or 조건으로 이용될 수

url의 & 연산자 와 API의 동작 방식은 독립적

 

4-2. Ordering 정렬 ; [GET] method 

동일한 데이터라도, 순서 정렬해야 할 때

높은 가격순, 낮은 가격순, 신상품순 등 

 

상품을 / ordering 정렬한다 / id를 기준으로 /

'-' 로 (역순)

 

4-3. Pagination ; [GET] method 

데이터 수 조절

 

데이터베이스에 저장된 데이터의 수가 엄청 많다면,

client가 한 번에 모든 데이터를 호출하여 사용 시,

통신 속도가 매우 저하 --> 비효율적

 

--> 클릭 한번에 정해진 수 만큼의 데이터만 호출

 

필요한 data의 시작점, 끝나는 점query streaming을 통해 전달

  • offset: data의 시작점
  • limit: 주고 받고자 하는 data의 갯수

 

 

Ex. 

[GET] /products?offset=0&limit=100

 

: 0~100번까지 data만 호출

4-4. Searching 검색 ; [GET] method 

검색 기능

 

searching이 독립적 새로운 기능처럼 보이지만,

사실 filtering과 동일한 기능

 

특정한 키워드를 기준으로 필터링을 하는 것

 

 

통상적으로 search 라는 단어를 주로 사용하지만,

검색어를 이용하는 기준이 늘 동일해야하는 것은 아님

 

Query parameter을 이용해 생성된 4가지 API --> [GET] /products 로 동일한 API를 호출

  • [GET] /products?price=3000   ;필터링
  • [GET] /products?ordering=-id   ;정렬
  • [GET] /products?offset=0&limit=100   ;pagination
  • [GET] /products?serach=홍길동   ;검색

--> 1개의 API

--> query string을 변수로 받아, 각각의 조건마다 필요한 데이터를 전송

 

query string **

 

pm-developer-justdoit.tistory.com

위 변수들을 request body 에 넣고 요청할 수 있지 않을까?  

HTTP method의 [GET] method에서는
request body를 사용하지 않는 것이 권장됨.

GET method를 호출, 동시에 정보 전달할 때에는, request body가 아닌,
query parameter 이용

 [GET] /procuts/1 ; path parameter로 만들어진 API
 [GET] /products
API와는 서로 다른 API

 

 

쿼리 매개변수라고도 불리는 query parameter를 서버 코드에서 다룰 때에는,

클라이언트에서 값을 주지 않을 때를 대비해

기본값을 설정할 수

 

동일한 key로 여러 value값을 전달할 경우,

server에서는 배열 [ ] 로 value값을 받을 수

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

 

5. 실제 사용 예시

github에서는 각 organization에 속한 레포지토리들을 확인할 수

 

repositories를 나타내는 API

https://github.com/orgs/wecode-bootcamp-korea/repositories 에서

 

쿼리 파라미터로

어떤 language 를 전달하느냐에 따라서

 

javascript 로 이루어진 레포지토리의 목록과 python 으로 이루어진 레포지토리의 목록을 필터링하여 표출할 수 

 

쿼리 파라미터로 어떤 sort 를 전달하느냐에 따라서

최신순 정렬이나 이름순 정렬, star를 많이 받은 순 으로 정렬할 수 

https://github.com/orgs/wecode-bootcamp-korea/repositories**?filtering-query-parameters**

 

6. Summary

  • 특정 리소스 정보를 반환하는 API를 설계할 때, 접근하는 고유한 정보를 변수화 하여 지정해둔 매개변수를 path Parameter 라 칭합니다. 해당 변수는 유일한 값을 식별하는 역할을 합니다.
  • 필요한 조건을 요청에 따라 데이터를 선택적으로 처리할 수 있는 통일된 API를 구성할 때 사용하는 매개변수를 query parameter라 칭합니다. 유일 값을 식별하기 위한 용도가 아닌 옵션을 줄 때 사용합니다.
  • Query parameter는 필터링, 정렬, 페이지네이션, 검색등의 경우에서 활용합니다.