Project 2- 2일 차: [API]세션(2) Query Parameter
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**
- https://github.com/orgs/wecode-bootcamp-korea/repositories**?q=&type=all&language=javascript&sort=stargazers**
- https://github.com/orgs/wecode-bootcamp-korea/repositories**?q=&type=all&language=python&sort=stargazers**
6. Summary
- 특정 리소스 정보를 반환하는 API를 설계할 때, 접근하는 고유한 정보를 변수화 하여 지정해둔 매개변수를 path Parameter 라 칭합니다. 해당 변수는 유일한 값을 식별하는 역할을 합니다.
- 필요한 조건을 요청에 따라 데이터를 선택적으로 처리할 수 있는 통일된 API를 구성할 때 사용하는 매개변수를 query parameter라 칭합니다. 유일 값을 식별하기 위한 용도가 아닌 옵션을 줄 때 사용합니다.
- Query parameter는 필터링, 정렬, 페이지네이션, 검색등의 경우에서 활용합니다.