Graph Query Language (GraphQL) é uma linguagem e especificação para interagir com GraphQL APIs, uma arquitetura cliente-servidor baseada em HTTP para comunicação na 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 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.

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 GraphQL em Go

GraphQL é baseado na arquitetura HTTP, e o Go fornece funcionalidade HTTP em seu 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 nos servidores GraphQL APIs com o http pacote e outros pacotes embutidos.

Pacotes de clientes GraphQL como

caixa de máquinas ou shurCooL's tornam o processo de interação com as APIs do GraphQL ainda mais fácil.

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

importar (
"bytes"
"codificação/json"
"fmt"
"io/ioutil"
"rede/http"
"tempo"
)

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 o pedido.

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 tipicamente 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 structs para trabalhar com JSON.

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

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

jsonMapInstance := mapa[corda]corda {
"consulta": `
{
países {
nome,
telefone,
moeda,
código,
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 da API 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 problemas de codificação.

jsonResult, erro := json. Marechal (jsonMapInstance)

se erro != nada {
fmt. Printf("Ocorreu um erro ao empacotar a instância JSON %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 leva em conta 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.

novoPedido, erro := http. NovoPedido("POST", "https://countries.trevorblades.com/graphql", bytes. NovoBuffer (jsonResult))
novo pedido. Cabeçalho. Set("Tipo de conteúdo", "aplicativo/json")

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


cliente := &http. Cliente{Timeout: time. Segundo * 5}
resposta, erro := cliente. Fazer (novoPedido)

se erro != nada {
fmt. Printf("Ocorreu um erro ao executar a requisição%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 da solicitação e retorna a resposta e um erro.

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

responseData, err := ioutil. ReadAll (resposta. Corpo)

se erro != nada {
fmt. Printf("Erro de leitura de dados%v", err)
}

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

fmt. Imprimirln(corda(respostaData))

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.