Graph Query Language (GraphQL) è un linguaggio e una specifica per l'interazione con le API GraphQL, un'architettura client-server basata su HTTP per la comunicazione sul web.
Facebook ha rilasciato GraphQL come alternativa allo standard architetturale REST. GraphQL risolve la maggior parte dei problemi con REST in modo stateless e memorizzabile nella cache. Fornisce una sintassi semplice e intuitiva che descrive l'output o gli input previsti e l'API inoltra i dati corrispondenti alla richiesta.
Poiché GraphQL è una specifica, puoi creare e utilizzare API GraphQL in qualsiasi linguaggio di programmazione lato server, incluso Go.
Guida introduttiva alle API GraphQL in Go
GraphQL si basa sull'architettura HTTPe Go fornisce la funzionalità HTTP nel suo built-in http pacchetto.
Puoi usare il http pacchetto a consuma API RESTful in Go, tra le altre caratteristiche. Per GraphQL, puoi effettuare query e mutazioni ai server delle API GraphQL con il http pacchetto e altri pacchetti integrati.
Pacchetti client GraphQL come
Machinebox O ShurCool's rendere ancora più semplice il processo di interazione con le API GraphQL.Puoi usare il http pacchetto senza dipendenze per interagire con un'API GraphQL. Importa questi pacchetti nel tuo file Go per iniziare:
importare (
"byte"
"codifica/json"
"fmt"
"io/ioutil"
"rete/http"
"tempo"
)
Userai il byte pacchetto per creare un nuovo buffer per la richiesta e il file json pacchetto per eseguire il marshalling di una mappa nel corpo della richiesta JSON. Puoi usare ioutil per leggere il corpo della risposta e il file tempo pacchetto per fissare un termine per la richiesta.
Interrogazione delle API GraphQL con Go
Esistono molte API GraphQL pubbliche gratuite che puoi interrogare e integrare nelle tue applicazioni. Per questo articolo, interrogherai l'API Paesi di Apollo GraphQL per interrogare i dati sui paesi di tutto il mondo.
Tutte le operazioni GraphQL sono in genere richieste POST poiché devono avere un payload (corpo della richiesta). La maggior parte delle API GraphQL accetta il corpo della richiesta JSON come tipo di contenuto e Go fornisce funzionalità per l'utilizzo di mappe e strutture per lavorare con JSON.
Dovrai studiare la struttura dello schema GraphQL per interrogare l'API. La query sarà la stessa di una normale query GraphQL, tranne per il fatto che l'operazione (query o mutazione) è la chiave e i dati sono il valore della mappa.
Ecco come puoi dichiarare un'istanza della mappa JSON che eseguirai il marshalling in JSON per la richiesta.
jsonMapInstance := carta geografica[corda]corda {
"domanda": `
{
Paesi {
nome,
telefono,
valuta,
codice,
emoji
}
}
`,
}
IL jsonMapInstance variabile è l'istanza della mappa per il corpo della richiesta. Il valore è una stringa dei dati della query che ti aspetti dall'API. In questo caso, i dati della query che ti aspetteresti dalle API Paesi lo schema sono i nome, telefono, valuta, codice, E emoji campi.
Puoi usare il Maresciallo metodo del json package per codificare l'istanza della mappa in JSON. IL Maresciallo Il metodo restituisce il JSON codificato e un errore per i casi con un problema di codifica.
jsonResult, err := json. Maresciallo (jsonMapInstance)
Se errare!= zero {
fmt. Printf("Si è verificato un errore durante il marshalling dell'istanza JSON %v", err)
}
Dopo aver codificato la mappa in JSON, puoi inviare la richiesta POST all'API. Puoi creare una nuova istanza di richiesta con il file Nuova richiesta metodo, che accetta il tipo di richiesta, l'URL e il buffer JSON.
IL Nuova richiesta Il metodo restituisce un'istanza di richiesta. Dovrai impostare il tipo di contenuto in base alle specifiche dell'API. È possibile impostare il tipo di contenuto per le richieste HTTP con il Impostato metodo del Intestazione metodo dell'istanza di richiesta.
newRequest, err := http. NuovaRichiesta("POST", "https://countries.trevorblades.com/graphql", byte. NuovoBuffer (jsonResult))
nuova richiesta. Intestazione. Set("Tipo di contenuto", "applicazione/json")
Puoi creare un semplice client HTTP per la tua richiesta con il file Cliente metodo del pacchetto HTTP. IL Cliente Il metodo ti consente anche di impostare un limite di tempo per la tua richiesta con il tempo pacchetto.
cliente := &http. Client{Timeout: tempo. Secondo * 5}
risposta, err := cliente. Esegui (nuova richiesta)
Se errare!= zero {
fmt. Printf("Si è verificato un errore durante l'esecuzione della richiesta%v", err)
}
Dopo aver dichiarato il client HTTP, esegui la tua richiesta API con il file Fare metodo. IL Fare Il metodo accetta l'istanza della richiesta e restituisce la risposta e un errore.
Puoi leggere la risposta della richiesta API con il file ioutil Pacchetti Leggi tutto metodo. Accetta un flusso di output e restituisce una porzione di byte dei dati con un errore che puoi gestire.
responseData, err := ioutil. LeggiTutto (risposta. Corpo)
Se errare!= zero {
fmt. Printf("Errore lettura dati%v", err)
}
Con la funzione di stringa incorporata, puoi convertire la risposta della sezione di byte nel tipo di stringa.
fmt. Stampaln(corda(dati di risposta))
Ecco una risposta che mostra il risultato della richiesta API:
Il consumo di API RESTful è come il consumo di API GraphQL
Poiché entrambe le API REST e GraphQL utilizzano il protocollo HTTP, l'utilizzo di ciascuna di esse è un processo molto simile ed è possibile utilizzare il http pacchetto per entrambi i casi.
Dovrai creare client, richiedere istanze e leggere i dati con gli stessi pacchetti.