Graph Query Language (GraphQL) er et språk og en spesifikasjon for samhandling med GraphQL APIer, en HTTP-basert klient-server-arkitektur for kommunikasjon på tvers av nettet.

Facebook ga ut GraphQL som et alternativ til REST-arkitektonisk standard. GraphQL løser de fleste problemene med REST på en tilstandsløs og hurtigbufringsbar måte. Den gir en enkel og intuitiv syntaks som beskriver forventet utgang(er) eller input(er), og API-en videresender dataene som samsvarer med forespørselen.

Siden GraphQL er en spesifikasjon, kan du bygge og konsumere GraphQL APIer på et hvilket som helst server-side programmeringsspråk, inkludert Go.

Komme i gang med GraphQL APIer in Go

GraphQL er basert på HTTP-arkitektur, og Go gir HTTP-funksjonalitet i sin innebygde http pakke.

Du kan bruke http pakke til bruk RESTful APIer i Go, blant andre funksjoner. For GraphQL kan du gjøre spørringer og mutasjoner til GraphQL API-servere med http pakke og andre innebygde pakker.

GraphQL klientpakker som Maskinbokser eller shurCooL's gjør prosessen med å samhandle med GraphQL APIer enda enklere.

Du kan bruke http pakke uten noen avhengigheter for å samhandle med en GraphQL API. Importer disse pakkene til Go-filen for å begynne:

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

Du vil bruke bytes pakken for å opprette en ny buffer for forespørselen og json pakke for å samle et kart til JSON-forespørselsteksten. Du kan bruke ioutil å lese svarteksten, og tid pakke for å angi en tidsbegrensning for forespørselen.

Spørre GraphQL APIer med Go

Det er mange gratis offentlige GraphQL APIer du kan spørre etter og integrere i applikasjonene dine. For denne artikkelen vil du spørre Apollo GraphQLs Countries API for å søke etter data om land over hele verden.

Alle GraphQL-operasjoner er vanligvis POST-forespørsler siden de må ha en nyttelast (forespørselstekst). De fleste GraphQL API-er godtar JSON-forespørselstekst som innholdstype, og Go gir funksjonalitet for bruk av kart og strukturer for å jobbe med JSON.

Du må studere strukturen til GraphQL-skjemaet for å spørre API. Spørringen vil være den samme som en vanlig GraphQL-spørring, bortsett fra at operasjonen (spørring eller mutasjon) er nøkkelen, og dataene er kartets verdi.

Slik kan du erklære en JSON-kartforekomst som du vil samle inn i JSON for forespørselen.

jsonMapInstance := kart[streng]streng {
"spørsmål": `
{
land {
Navn,
telefon,
valuta,
kode,
emoji
}
}
`,
}

De jsonMapInstance variabel er kartforekomsten for forespørselens brødtekst. Verdien er en streng av spørringsdataene du forventer fra API-en. I dette tilfellet spørringsdataene du forventer fra API-ene land skjema er Navn, telefon, valuta, kode, og emoji Enger.

Du kan bruke Marskalk metoden for json pakke for å kode kartforekomsten til JSON. De Marskalk metoden returnerer den kodede JSON og en feil for tilfeller med et kodingsproblem.

jsonResultat, feil := json. Marshal (jsonMapInstance)

hvis feil!= null {
fmt. Printf("Det oppstod en feil under marshaling av JSON-forekomsten %v", err)
}

Når du har kodet kartet til JSON, kan du sende POST-forespørselen til API. Du kan opprette en ny forespørselsforekomst med Ny forespørsel metode, som tar inn forespørselstype, URL og JSON-buffer.

De Ny forespørsel metoden returnerer en forespørselsforekomst. Du må angi innholdstypen avhengig av API-ens spesifikasjoner. Du kan angi innholdstypen for HTTP-forespørsler med Sett metoden for Overskrift metoden for forespørselsforekomsten din.

newRequest, feil := http. NewRequest("POST", "https://countries.trevorblades.com/graphql", bytes. NewBuffer (jsonResult))
nyForespørsel. Overskrift. Set("Content-Type", "application/json")

Du kan opprette en enkel HTTP-klient for forespørselen din med Klient metoden for HTTP-pakken. De Klient metoden lar deg også angi en tidsbegrensning for forespørselen din med tid pakke.


klient := &http. Klient{Tidsavbrudd: tid. Sekund * 5}
svar, feil := klient. Gjør (ny forespørsel)

hvis feil!= null {
fmt. Printf("Det oppstod en feil under utførelse av forespørselen%v", err)
}

Etter at du har erklært HTTP-klienten, utfør API-forespørselen din med Gjøre metode. De Gjøre metoden godtar forespørselsforekomsten og returnerer svaret og en feil.

Du kan lese svaret på API-forespørselen med ioutil pakkens Les alle metode. Den tar inn en utdatastrøm og returnerer en bytebit av dataene med en feil du kan håndtere.

responseData, feil := ioutil. Les alle (svar. Kropp)

hvis feil!= null {
fmt. Printf("Data Lesefeil%v", feil)
}

Med den innebygde strengfunksjonen kan du konvertere bytesnittresponsen til strengtypen.

fmt. Println(streng(responsdata))

Her er et svar som viser resultatet av API-forespørselen:

Å konsumere RESTful APIer er som å konsumere GraphQL APIer

Siden både REST- og GraphQL-API-er bruker HTTP-protokollen, er forbruk av hver enkelt prosess veldig lik, og du kan bruke http pakke for begge tilfeller.

Du må opprette klienter, be om forekomster og lese dataene med de samme pakkene.