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çãoMAKEUSEO 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.
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:
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.