쿼리스트링이란 무엇인가!?

필요성

  • 프론트에서 백엔드로 데이터를 요청할때 엔드포인트 주소를 사용한다. 이때 받게되는 데이터가 작은 양이고, 그 양이 늘어나지 않으며, 내용 또한 바뀌지 않는다면 그냥 DB에 있는 row전부를 내보내도 상관이 없을것이다. 하지만 상용화된 웹은 거의 그럴일이 없다. 여기서 쿼리스트링의 필요성이 나타난다. 쿼리스트링으로 url에 파라미터를 받게되면, 엔드포인트에 데이터를 요청하더라도, 입력한 파라미터의 값에따라 필요한 데이터만 제공하는 것이 가능해진다.

그래서 뭐냐?

  • 그래서 결론적으로 쿼리스트링이 무엇인고 하니 : 사용자가 입력 데이터를 전달하는 방법중의 하나로, url 주소에 미리 협의된 데이터를 파라미터를 통해 넘기는 것을 말한다.

형식

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

백엔드에서 받는법(django, python)

  • 그다지 어렵지는 않다. request.GET을 통해 전달된 파라미터의 값을 받고 만약 전달된 값이 없다면 기본으로 설정된 값으로 GET이 실행되도록 해주면 된다.

  • 다음 코드는 이번주에 진행하는 op.gg클론 사이트에서 사용할 챔피언 정보를 내보내주는 코드이다.

      http://localhost:8000/champ_infos/detail?champ_detail=1

    위와 같이 db에 저장된 챔피언 아이디를 champ_detail이라는 정보를 통해 불러오고자 저런식의 url로 요청을 보낸다.

      class DetailView(View):
          def get(self, request):
              champ_id = request.GET.get("champ_detail", None)
              data = Champ_Info.objects.get(id=champ_id)
    
              return JsonResponse({    
                  "ID" : data.id,
                  "NAME" : data.name,
                  "MOVIE" : data.splash_video,
                  "TITLE" : data.title,
                  "ICON" : data.small_icon,
                  .
                  .
                  .
    

    그렇게 되면 위 코드에서 champ_detail이라는 파라미터를 찾아서 그에 할당된 값을 가져오고, 가져온 값에 일치하는 챔피언 id를 db에서 찾은 후, 다음과같이 해당 챔피언의 정보를 리턴해주게 된다.

HTTPie 테스트용 명령어

  • 필자의 기억력을 신뢰하지않고 잉크로 남기기 위해 HTTPie 명령어를 덧붙인다.
      http -v get localhost:8000/champ_info/detail champ_detail==10