Go에서 GraphQL API 엔드포인트를 사용하는 방법

Go에서 GraphQL API 엔드포인트를 사용하는 방법

GraphQL(Graph Query Language)은 웹을 통한 통신을 위한 HTTP 기반 클라이언트-서버 아키텍처인 GraphQL API와 상호 작용하기 위한 언어 및 사양입니다.





Facebook은 REST 아키텍처 표준의 대안으로 GraphQL을 출시했습니다. GraphQL은 상태 비저장 및 캐시 가능한 방식으로 REST와 관련된 대부분의 문제를 해결합니다. 예상되는 출력 또는 입력을 설명하는 간단하고 직관적인 구문을 제공하며 API는 요청과 일치하는 데이터를 중계합니다.





MAKEUSEOF 오늘의 비디오

GraphQL은 사양이므로 Go를 포함한 모든 서버 측 프로그래밍 언어로 GraphQL API를 빌드하고 사용할 수 있습니다.





Go에서 GraphQL API 시작하기

GraphQL은 HTTP 아키텍처를 기반으로 합니다. , Go는 내장된 HTTP 기능을 제공합니다. http 패키지.

당신은 사용할 수 있습니다 http 패키지 Go에서 RESTful API 사용 , 다른 기능 중에서. GraphQL의 경우 다음을 사용하여 GraphQL API 서버에 쿼리 및 변형을 수행할 수 있습니다. http 패키지 및 기타 내장 패키지.



  Go HTTP 패키지의 개요 섹션

다음과 같은 GraphQL 클라이언트 패키지 머신박스의 또는 셔쿨 GraphQL API와 상호 작용하는 프로세스를 더욱 쉽게 만듭니다.

당신은 사용할 수 있습니다 http GraphQL API와 상호 작용하기 위해 종속성이 없는 패키지입니다. 시작하려면 다음 패키지를 Go 파일로 가져오세요.





import ( 
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
)

당신은 사용할 것입니다 바이트 요청에 대한 새 버퍼를 생성하기 위한 패키지 및 json JSON 요청 본문에 맵을 마샬링하는 패키지입니다. 당신이 사용할 수있는 아이오틸 응답 본문을 읽고 시각 패키지를 사용하여 요청에 대한 시간 제한을 설정합니다.

Go로 GraphQL API 쿼리하기

쿼리하고 애플리케이션에 통합할 수 있는 많은 무료 공개 GraphQL API가 있습니다. 이 기사에서는 Apollo GraphQL의 Countries API를 쿼리하여 전 세계 국가에 대한 데이터를 쿼리합니다.





모든 GraphQL 작업은 페이로드(요청 본문)가 있어야 하므로 일반적으로 POST 요청입니다. 대부분의 GraphQL API는 JSON 요청 본문을 콘텐츠 유형으로 허용하며, Go는 지도 및 구조체를 사용하여 JSON 작업을 위한 기능을 제공합니다. .

API를 쿼리하려면 GraphQL 스키마의 구조를 연구해야 합니다. 쿼리는 연산(쿼리 또는 변형)이 키이고 데이터가 맵의 값이라는 점을 제외하고 일반 GraphQL 쿼리와 동일합니다.

다음은 요청을 위해 JSON으로 마샬링할 JSON 맵 인스턴스를 선언하는 방법입니다.

jsonMapInstance := map[string]string { 
"query": `
{
countries {
name,
phone,
currency,
code,
emoji
}
}
`,
}

그만큼 jsonMap인스턴스 변수는 요청 본문에 대한 맵 인스턴스입니다. 값은 API에서 기대하는 쿼리 데이터의 문자열입니다. 이 경우 API에서 기대할 수 있는 쿼리 데이터는 국가 스키마는 이름 , 핸드폰 , 통화 , 암호 , 그리고 이모티콘 필드.

당신은 사용할 수 있습니다 육군 원수 방법 json 맵 인스턴스를 JSON으로 인코딩하는 패키지입니다. 그만큼 육군 원수 메서드는 인코딩된 JSON과 인코딩 문제가 있는 경우 오류를 반환합니다.

jsonResult, err := json.Marshal(jsonMapInstance) 

if err != nil {
fmt.Printf("There was an error marshaling the JSON instance %v", err)
}

지도를 JSON으로 인코딩한 후에는 API에 POST 요청을 보낼 수 있습니다. 다음을 사용하여 새 요청 인스턴스를 만들 수 있습니다. 새로운 요청 요청 유형, URL 및 JSON 버퍼를 사용하는 메서드입니다.

그만큼 새로운 요청 메서드는 요청 인스턴스를 반환합니다. API의 사양에 따라 콘텐츠 유형을 설정해야 합니다. 다음을 사용하여 HTTP 요청에 대한 콘텐츠 유형을 설정할 수 있습니다. 세트 방법 헤더 요청 인스턴스의 메서드입니다.

newRequest, err := http.NewRequest("POST", "https://countries.trevorblades.com/graphql", bytes.NewBuffer(jsonResult)) 
newRequest.Header.Set("Content-Type", "application/json")

다음을 사용하여 요청에 대한 간단한 HTTP 클라이언트를 만들 수 있습니다. 고객 HTTP 패키지의 메소드 그만큼 고객 이 방법을 사용하면 요청에 대한 시간 제한을 설정할 수도 있습니다. 시각 패키지.

 
client := &http.Client{Timeout: time.Second * 5}
response, err := client.Do(newRequest)

if err != nil {
fmt.Printf("There was an error executing the request%v", err)
}

HTTP 클라이언트를 선언한 후 다음을 사용하여 API 요청을 실행합니다. 하다 방법. 그만큼 하다 메서드는 요청 인스턴스를 수락하고 응답과 오류를 반환합니다.

100% 디스크 사용량을 수정하는 방법

다음을 사용하여 API 요청의 응답을 읽을 수 있습니다. 아이오틸 패키지의 모두 읽기 방법. 출력 스트림을 받아 처리할 수 있는 오류가 있는 데이터의 바이트 슬라이스를 반환합니다.

responseData, err := ioutil.ReadAll(response.Body) 

if err != nil {
fmt.Printf("Data Read Error%v", err)
}

내장된 문자열 기능을 사용하여 바이트 슬라이스 응답을 문자열 유형으로 변환할 수 있습니다.

fmt.Println(string(responseData)) 

다음은 API 요청 결과를 보여주는 응답입니다.

  GraphQL API 쿼리의 출력은 국가 목록과 요청된 필드를 보여줍니다.

RESTful API를 사용하는 것은 GraphQL API를 사용하는 것과 같습니다.

REST 및 GraphQL API는 모두 HTTP 프로토콜을 사용하기 때문에 각각을 사용하는 것은 매우 유사한 프로세스이며 다음을 사용할 수 있습니다. http 두 경우 모두 패키지.

클라이언트를 만들고 인스턴스를 요청하고 동일한 패키지로 데이터를 읽어야 합니다.