Como consumir endpoints da API GraphQL em Go

Como consumir endpoints da API GraphQL em Go

Graph Query Language (GraphQL) é uma linguagem e especificação para interagir com APIs GraphQL, uma arquitetura cliente-servidor baseada em HTTP para comunicação pela web.





O Facebook lançou o GraphQL como uma alternativa ao padrão de arquitetura REST. O GraphQL aborda a maioria dos problemas com REST de maneira sem estado e com armazenamento em cache. Ele fornece uma sintaxe simples e intuitiva que descreve a(s) saída(s) ou entrada(s) esperada(s), e a API retransmite os dados correspondentes à solicitação.





filmes completos grátis sem inscrição
MAKEUSEO VÍDEO DO DIA

Como o GraphQL é uma especificação, você pode criar e consumir APIs do GraphQL em qualquer linguagem de programação do lado do servidor, incluindo Go.





Introdução às APIs do GraphQL em Go

GraphQL é baseado na arquitetura HTTP , e Go fornece a funcionalidade HTTP em seu built-in http pacote.

Você pode usar o http pacote para consumir APIs RESTful em Go , entre outras funcionalidades. Para GraphQL, você pode fazer consultas e mutações em servidores de APIs GraphQL com o http pacote e outros pacotes embutidos.



  seção de visão geral do pacote Go HTTP

Pacotes de cliente GraphQL como Caixas de máquinas ou shurCooL's tornar o processo de interação com as APIs do GraphQL ainda mais fácil.

Você pode usar o http pacote sem dependências para interagir com uma API GraphQL. Importe esses pacotes em seu arquivo Go para começar:





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

Você usará o bytes pacote para criar um novo buffer para a solicitação e o json pacote para empacotar um mapa para o corpo da solicitação JSON. Você pode usar ioutil para ler o corpo da resposta e o Tempo pacote para definir um limite de tempo para a solicitação.

Consultando APIs GraphQL com Go

Existem muitas APIs GraphQL públicas gratuitas que você pode consultar e integrar em seus aplicativos. Para este artigo, você consultará a API de países do Apollo GraphQL para consultar dados sobre países em todo o mundo.





Todas as operações do GraphQL são geralmente solicitações POST, pois devem ter uma carga útil (corpo da solicitação). A maioria das APIs GraphQL aceita o corpo da solicitação JSON como o tipo de conteúdo e Go fornece funcionalidade para usar mapas e estruturas para trabalhar com JSON .

Você precisará estudar a estrutura do esquema GraphQL para consultar a API. A consulta será igual a uma consulta GraphQL normal, exceto que a operação (consulta ou mutação) é a chave e os dados são o valor do mapa.

como habilitar a depuração usb no Android

Veja como você pode declarar uma instância de mapa JSON que você empacotará em JSON para a solicitação.

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

o jsonMapInstance variável é a instância do mapa para o corpo da solicitação. O valor é uma string dos dados de consulta que você espera da API. Nesse caso, os dados de consulta que você espera das APIs países esquema são os nome , telefone , moeda , código , e emoji Campos.

Você pode usar o Marechal método do json pacote para codificar a instância do mapa para JSON. o Marechal O método retorna o JSON codificado e um erro para casos com um problema de codificação.

jsonResult, err := json.Marshal(jsonMapInstance) 

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

Depois de codificar o mapa para JSON, você pode enviar a solicitação POST para a API. Você pode criar uma nova instância de solicitação com o Novo pedido método, que recebe o tipo de solicitação, URL e buffer JSON.

o Novo pedido O método retorna uma instância de solicitação. Você terá que definir o tipo de conteúdo dependendo das especificações da API. Você pode definir o tipo de conteúdo para solicitações HTTP com o Definir método do Cabeçalho método de sua instância de solicitação.

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

Você pode criar um cliente HTTP simples para sua solicitação com o Cliente método do pacote HTTP. o Cliente também permite que você defina um limite de tempo para sua solicitação com o Tempo pacote.

 
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)
}

Depois de declarar o cliente HTTP, execute sua solicitação de API com o Fazer método. o Fazer O método aceita a instância de solicitação e retorna a resposta e um erro.

Você pode ler a resposta da solicitação de API com o ioutil pacote Leia tudo método. Ele recebe um fluxo de saída e retorna uma fatia de bytes dos dados com um erro que você pode manipular.

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

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

Com a função de string integrada, você pode converter a resposta da fatia de bytes para o tipo de string.

quão quente pode um computador ficar
fmt.Println(string(responseData)) 

Aqui está uma resposta mostrando o resultado da solicitação da API:

  A saída de uma consulta da API GraphQL mostra uma lista de países e seus campos solicitados.

Consumir APIs RESTful é como consumir APIs GraphQL

Como as APIs REST e GraphQL usam o protocolo HTTP, consumir cada uma é um processo muito semelhante e você pode usar o http pacote para ambos os casos.

Você precisará criar clientes, solicitar instâncias e ler os dados com os mesmos pacotes.