CS_study

query parameter, query string, path variable

soobin Choi 2022. 12. 8. 18:02

🔑 Q. query parameter, query string, path variable

* API의 endpoint를 어떻게 설계할지, GET method를 통해 데이터를 넘길 경우에 Path Variable 와 Query Parameter 중 뭐가 더 적합한가?

1. Query Parameter

함수에 사용되는 parameter인데 path parameter에 없는 파라미터

from fastapi import FastAPI

app = FastAPI()

fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]

@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
    return fake_items_db[skip : skip + limit]

위 코드에서 skip과 limit은 query로 값을 받는 파라미터이다.

저 skip과 limit에 값을 넣어주고 싶으면 ? 와 & 를 이용한다.

아래와 같이 url 요청하면 된다

<http://127.0.0.1:8000/items/?skip=0&limit=10>

기본적으로 query parameter에 값을 실어서 보내면 데이터형은 String이 된다.

허나 위 예제에서는 query parameter에 데이터 타입을 명시하였다. 그러면 fast api는 자동으로 int형으로 바꿔준다.

 

Query Parameter 경로 뒤에 입력 데이터를 함께 제공하는 식으로 사용

/post?post_id=6

이 때 ? 이후의 부분을 query string이라고 하며 뒤는 key, value의 쌍으로 이루어집니다.

다음과 같이 &로 연결하여 여러 개의 데이터를 넘길 수도 있습니다.

/post?post_id=6&key1=value1

Query Parameter데이터를 처리하기 위해 넘겨주는 여러가지 매개변수이며 항상 ? 가 붙음

2. Query String

Query String이란 서버에게 무엇이 필요한지, 혹은 클라이언트에게 무엇이 필요한지 묻는 문자열을 의미합니다.

Query String은 아래와 같은 형태로 구성됩니다.

# id가 444인 게시글을 가져옵니다.
/board?id=444

주소 뒤에 ‘?’를 붙여서 표현합니다. ‘key=value’ 형태로 키와 값을 작성하고 여러 개를 보내기 위해 ‘&’를 붙여줍니다.

 

Query String이란 사용자가 입력 데이터를 전달하는 방법 중의 하나로, url 주소에 미리 협의된 데이터를 파라미터를 통해 넘기는 것

[http://host:port/path?querystring](http://host:port/path?querystring)

query parameters( 물음표 뒤에 = 로 연결된 key value pair 부분)을 url 뒤에 덧붙여서 추가적인 정보를 서버 측에 전달하는 것이다. 클라이언트가 어떤 특정 리소스에 접근하고 싶어하는지 정보를 담는다.

형식

  • 정해진 엔드포인트 주소 이후에 ?를 쓰는것으로 쿼리스트링이 시작함을 알린다
  • parameter=value로 필요한 파라미터의 값을 적는다
  • 파라미터가 여러개일 경우 &를 붙여 여러개의 파라미터를 넘길 수 있다.엔드포인트주소/엔드포인트주소?파라미터=값&파라미터=값
  • = 로 key 와 value 가 구분된다.

3. Path Variable

Path Variable이란 Query String과 같이 데이터를 넘기는 방법 중의 하나로 경로를 변수처럼 사용하는 것을 의미합니다.

Path Variable은 아래와 같은 형태로 구성됩니다.

# id가 444인 게시글을 가져옵니다.
/board/444

게시물이 존재하며 각각의 게시물을 볼 수 있는 경우를 생각해봅시다.

각각의 게시물을 보기 위해서는 게시물의 id를 서버에 넘겨줘야 합니다.

이를 Path Variable 를 사용하면 다음과 같이 나타냅니다.

/post/6

4. Query String과 Path Variable을 각각 언제 사용해야 하는가

Path Variable은 구체적인 리소스를 식별하는데 사용합니다. 아래의 예시와 같이 id가 444인 게시글이라는 구체적인 리소스를 식별하는데 사용합니다.

# id가 444인 게시글을 가져옵니다.
/board/444

반면에 Query String은 리소스들을 정렬, 필터링 혹은 페이징하는 곳에 사용합니다. 아래의 예시와 같이 writer가 nick인 게시글 리스트라는 필터링된 리소스들을 가져오는데 사용합니다.

# writer가 nick인 게시글들을 가져옵니다.
/board/list?writer=nick- 어느 상황에 어떤 방식을 써야하는지 생각을 해봅시다.

 

► Query Parameter vs Path Variable 를 어떤 상황에서 사용해야 할까?

ex) 어떤 resource를 식별해야하는 상황

그런데 만약 존재하지 않은 resource의 id가 들어올 경우 각각 어떻게 동작할까요?

우선 Path Variable 은 저 경로의 존재하는 페이지가 없으므로 404 에러를 발생합니다.

그에 비해 Query Parameter는 서버로 데이터가 넘어가고 쿼리를 날리며 해당하는 데이터가 없을 경우 따로 에러 핸들링을 해줘야합니다.

즉 resource를 식별해야하는 상황에서는 Path Variable 가 더 적합합니다.

ex) 정렬이나 필터링을 해야할 상황

post에 대해 django 관련 글만 필터링하는 아래와 같은 예시가 있습니다.

post/django
post?category=django

django 관련 글이 없을 경우, Path Variable 는 404에러를 발생하고 Query Parameter 는 빈 리스트를 반환할 것입니다.

펄터링을 하다가 404에러가 발생하는 것은 부적절하므로 정렬이나 필터링을 해야하는 상황에서는 Query Parameter 가 더 적합합니다.

 

https://kchanguk.tistory.com/55

 

QueryString과 Path Variable은 각각 언제 사용하는가

1. Query String이란 Query String이란 서버에게 무엇이 필요한지, 혹은 클라이언트에게 무엇이 필요한지 묻는 문자열을 의미합니다. Query String은 아래와 같은 형태로 구성됩니다. # id가 444인 게시글을

kchanguk.tistory.com

https://ssungkang.tistory.com/entry/Web-Path-Variable-VS-Query-Parameter

 

[Web] Path Variable VS Query Parameter

백앤드 개발을 하다보면 API의 endpoint를 어떻게 설계할지에 대한 고민을 계속 하게 됩니다. 저 역시 그런 생각을 하다가 GET method를 통해 데이터를 넘길 경우에 Path Variable와 Query Parameter 중 뭐가 더

ssungkang.tistory.com

https://ryan-han.com/post/translated/pathvariable_queryparam/

 

[번역] Path Variable과 Query Parameter는 언제 사용해야 할까? | Integerous DevLog

[번역] Path Variable과 Query Parameter는 언제 사용해야 할까? 2019/04/23 원작자의 허락을 받고 번역한 글입니다. 원문: When Should You Use Path Variable and Query Parameter? *역자 주: Spring boot와 Vue.js로 파일럿 프로

ryan-han.com