HTTP를 통해GraphQL:cURL,Python,JavaScript,Ruby,PHP를 다섯 가지 방식으로 실현

지난 몇 달 동안 나는 많은 시간과 시간을 썼다.나도 이전에 시도해 봤지만GraphQL은 우리의 무료 Community edition의 일부가 되어 나로 하여금 멋진 새로운 프로젝트를 창조하게 했다.
내가 GraphQL API를 알았을 때, 나는 GraphQL의 작업 방식에 대해 약간의 오해가 있다는 것을 깨달았다.나는 데이터를 얻기 위해 클라이언트 라이브러리를 설치해야 한다고 잘못 생각했다.자바스크립트 생태계를 벗어나면 GraphQL 클라이언트 라이브러리의 상태가 좀 거칠기 때문에 다른 언어에서 GraphQL을 사용하는 것이 그렇게 실용적이지 않을 것이라고 생각합니다.시간의 흐름과 동료들이 부드럽게 나의 잘못을 지적함에 따라 나는 HTTP 요청 하나만으로GraphQL 조회를 할 수 있다는 것을 깨달았다.
GraphQL을 사용하는 것이 얼마나 쉬운지 보여주는 동시에 나의 가설을 바로잡는 데 시간을 들여서 몇 가지 다른 언어로 데이터를 조회하는 방법을 보여 준다.

GraphQL 쿼리


시작하기 전에 질의와 API 엔드포인트가 필요합니다.Contentful을 통해 이 두 항목을 가져오는 것은 쉬운 일이다.API 엔드포인트의 경우 GraphQL docs에서 가져온 Contentful의 API 베이스 URL https://graphql.contentful.com을 사용할 수 있습니다.검색어를 찾으려면 GraphiQL을 사용할 수 있습니다. 이것은 브라우저의GraphQL IDE입니다.https://graphql.contentful.com/content/v1/spaces/{SPACE_ID}/explore?access_token={accessToken}을 열고 자신의 spaceIDaccessToken을 교체하세요.
이 예에서 내가 사용하는 공간은 서버가 없는 슈퍼히어로 사이트에서 나온다.더 많은 정보를 알고 싶으면 이 blog post을 보십시오. 그러나 중요한 것은 이미 일부 내용 모델과 내용이 있다는 것입니다.
GraphiQL에서 검색어를 만들 수 있습니다.GraphQL은 문서화됩니다. 이것은 문서화 explorer와GraphiQL의 내장 자동 완성 기능 (ctrl 빈칸을 통해 열기) 을 사용하여 조회를 만들 수 있음을 의미합니다.재생 버튼을 누르세요.질의에 오류가 없으면 오른쪽에 공유 공간의 데이터가 포함된 JSON blob이 표시됩니다.

이 예에서, 나는 아래의 조회, 공간 id, 방문 영패를 사용할 것입니다. 그러나, 직접 시도하고 싶으면 마음대로 바꾸십시오.
이 예에서, 나는 아래의 조회, 공간 id, 방문 영패를 사용할 것입니다. 그러나, 직접 시도하고 싶으면 마음대로 바꾸십시오.
spaceID = mt0pmhki5db7
accessToken = 8c7dbd270cb98e83f9d8d57fb8a2ab7bac9d7501905fb013c69995ebf1b2a719
Query = 
{
  showCollection{
    items {
      title
      firstEpisodeDate
      lastEpisodeDate
      henshinMp4 {
        url
      }
    }
  }
}

구부러지다


우선 cURL을 통해 요청을 드리겠습니다.cURL은 명령행 유틸리티이기 때문에 프로그래밍 언어에 들어가기 전에 우리는 모든 파라미터를 깊이 연구할 수 있다.질의가 있으므로 Contentful developer docs에 제공된 cURL 예를 수정할 수 있습니다.
curl -g \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 8c7dbd270cb98e83f9d8d57fb8a2ab7bac9d7501905fb013c69995ebf1b2a719" \
-d '{"query":"query{showCollection {items { title firstEpisodeDate lastEpisodeDate henshinMp4 { url }}}}"}' \
[https://graphql.contentful.com/content/v1/spaces/mt0pmhki5db7](https://graphql.contentful.com/content/v1/spaces/mt0pmhki5db7~~~)
비록 내용이 있는 GQL API는 POST와 GET를 동시에 지원하지만, 우리는 본고에서 POST를 전문적으로 사용할 것이다. 왜냐하면 POST는 조회를 JSON 부하의 일부분으로 발송할 수 있기 때문이다.자신의 조회, 공간 id,accessToken을 사용하고 있다면, 계속해서 그것들을 바꾸십시오.

터미널에서 명령을 실행하면 이전 예와 일치하는 JSON blob이 출력됩니다!다음 예제에서는 cURL 요청과 유사한 형식을 사용합니다.

활용단어참조


Python에서 HTTP 요청을 보내는 방식이 매우 적습니다. 이것은GraphQL 조회를 어떻게 하는지에 대한 옵션을 제공합니다.청구고(https://requests.readthedocs.io)의 팬입니다.그것은 매우 간단하지만, urllib와 달리, 우리는 그것을 설치해야 한다.
이것은 새 Python 프로젝트이기 때문에 새로운 가상 환경을 시작하고 요청을 설치하고 새 Python 파일을 만듭니다.
# create the virtual environment
virtualenv env
# activate the environment
source env/bin/activate
# install the requests library
pip install requests
# create an empty file. 
touch request.py
새로 만든 Python 파일에서 라이브러리를 가져옵니다.공간 id와 방문 영패를 설정합니다.나는 보통 이것을 한 상자 안에 넣는다.환경 파일.그러나 이것은 예시이기 때문에 우리는 그것을 파일에 저장할 수 있다.
끝점 URL 및 라이센스 헤더를 작성합니다.저는 f-strings의 팬입니다. f-strings는 파이톤에서 문자열을 처리하는 새로운 방법입니다. 그래서 저는 이런 형식을 사용합니다.조회를 설정하고 요청을 보냅니다.마지막으로 200HTTP 상태 코드를 받으면 JSON 라이브러리로 출력을 포맷합니다.
import requests
import JSON
spaceID = "mt0pmhki5db7"
accessToken = "8c7dbd270cb98e83f9d8d57fb8a2ab7bac9d7501905fb013c69995ebf1b2a719"
endpoint = _f_"https://graphql.contentful.com/content/v1/spaces/{spaceID}"
headers = {"Authorization": _f_"Bearer {accessToken}"}
query = """query {
  showCollection{
    items {
      title
      firstEpisodeDate
      lastEpisodeDate
      henshinMp4 {
        url
      }
    }
  }
}"""
r = requests.post(endpoint, _json_={"query": query}, _headers_=headers)
if r.status_code == 200:
    print(json.dumps(r.json(), _indent_=2))
else:
    raise _Exception_(_f_"Query failed to run with a {r.status_code}.")
python request.py 실행 코드로 JSON blob을 보실 수 있습니다!

JavaScript(Node.js)


파이썬 명령과 마찬가지로 JavaScript의 HTTP 라이브러리를 사용합니다.JavaScript 버전 요청이 더 이상 지원되지 않으므로 got을 사용하겠습니다.새 디렉토리에서는 npm install got이 실행됩니다.다음 코드를 사용하여 새 request.js 파일을 만듭니다.
const got = require("got");
const spaceID = "mt0pmhki5db7";
const accessToken = "8c7dbd270cb98e83f9d8d57fb8a2ab7bac9d7501905fb013c69995ebf1b2a719";
const endpoint = "https://graphql.contentful.com/content/v1/spaces/" + spaceID;
const query = {% raw %}`query{
  showCollection{
    items {
      title
      firstEpisodeDate
      lastEpisodeDate
      henshinMp4 {
        url
      }
    }
  }
}`{% endraw %};

const options = {
  headers: {
    Authorization: "Bearer " + accessToken,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ query }),
};
got
  .post(endpoint, options)
  .then((response) => {
    console.log(response.body);
  })
  .catch((error) => {
    console.log(error);
  });

이 예는 node request.js에서 실행하여 JSON blob을 얻을 수 있습니다.

루비


Ruby를 사용하여 HTTP 요청을 하는 것은 라이브러리를 설치하지 않아도 할 수 있는 일이다.다음 예제에서 사용할 모든 것이 Ruby에 내장되어 있습니다.다음 코드를 사용하여 새 requests.rb 파일을 만듭니다.
require 'net/http'
require 'json'
require 'uri'
spaceID = "mt0pmhki5db7"
accessToken = "8c7dbd270cb98e83f9d8d57fb8a2ab7bac9d7501905fb013c69995ebf1b2a719"
query = """query {
  showCollection{
    items {
      title
      firstEpisodeDate
      lastEpisodeDate
      henshinMp4 {
        url
      }
    }
  }
}"""
uri = URI("https://graphql.contentful.com/content/v1/spaces/#{spaceID}")

res = _Net_::_HTTP_.start(uri.host, uri.port, use_ssl: true) do |http|
    req = _Net_::_HTTP_::_Post_.new(uri)
    req['Content-Type'] = 'application/json'
    req['Authorization'] = "Bearer #{accessToken}"
    # The body needs to be a JSON string.
    req.body = _JSON_[{'query' => query}]
    puts(req.body)
    http.request(req)
end

puts(res.body)
우리는 ruby requests.rb으로 이 파일을 실행할 수 있다.

PHP


Ruby와 마찬가지로 PHP에 라이브러리를 설치할 필요가 없습니다.이전 예와 마찬가지로 컨텐트가 있는 GraphQL 엔드포인트에 공간 ID를 첨부하고 헤드와 요청체를 설정합니다.요약하여 POST 요청을 제출합니다.응답에 오류가 없으면 출력을 기록하십시오.
<php
$spaceID = "mt0pmhki5db7";
$accessToken = "8c7dbd270cb98e83f9d8d57fb8a2ab7bac9d7501905fb013c69995ebf1b2a719";
$endpoint = "https://graphql.contentful.com/content/v1/spaces/%s";

$query = "query {
  showCollection{
    items {
          title
          firstEpisodeDate
          lastEpisodeDate
          henshinMp4 {
            url
      }
    }
  }
}";

$data = array ('query' => $query);
$data = http_build_query($data);
$options = array(
  'http' => array(
    'header'  => sprintf("Authorization: Bearer %s",$accessToken),
    'method'  => 'POST',
    'content' => $data
  )
);

$context  = stream_context_create($options);
$result = file_get_contents(sprintf($endpoint, $spaceID), false, $context);
if ($result === FALSE) { /* Handle error */ }

var_dump($result);
>

이 PHP 요청을 계속 실행합니다.php에서 최종 JSON blob을 가져옵니다.

마무리


우리는 다섯 가지 다른 방식(cURL, 파이톤, 자바스크립트, 루비와 PHP)으로 HTTP를 통해GraphQL 요청을 보냈다.만약 우리가 정말로 원한다면, 파이톤이나 자바스크립트 예시에서 요청 라이브러리를 삭제하고, 이 언어만 내장된 URL 처리 기능을 선택해서 요청을 더욱 간소화할 수 있습니다.
이러한 예들은 GraphQL을 사용하는 것이 전통적인restful API보다 어렵지 않지만, Rest보다 훨씬 좋은 점이 있다는 것을 보여 준다. GraphQL을 이용하여 우리는 단일 검색에서 요청한 데이터만 얻을 수 있다.질의 예제에서 사용하는 호출을 수행하려면 컨텐츠가 있는 Rest API에 대해 여러 요청을 보내야 합니다.반응은 우리가 필요로 하지 않을 수도 있는 추가 정보에 시달리지 않을 것이라고 더욱 예측할 수 있다.
이러한 예시들이 당신이 이런 조회 데이터를 깊이 연구하는 새로운 방법을 계발할 수 있기를 바랍니다.자세한 내용은 GraphQL course을 참조하십시오.이 책에서 DevRel팀의 Stefan은 GraphQL, React, Contentful을 어떻게 사용하는지 가르쳐 줍니다. GraphQL 도구, 세션, 지령, 변수, 조회 복잡성 비용 (그리고 더 많은 것) 을 포함합니다.

좋은 웹페이지 즐겨찾기