Graph Query Language (GraphQL) er et sprog og en specifikation til interaktion med GraphQL API'er, en HTTP-baseret klient-server-arkitektur til kommunikation på tværs af nettet.
Facebook udgav GraphQL som et alternativ til REST arkitektoniske standard. GraphQL løser de fleste problemer med REST på en tilstandsløs og cachebar måde. Det giver en enkel og intuitiv syntaks, der beskriver de forventede output(s) eller input(s), og API'en videresender de data, der matcher anmodningen.
Da GraphQL er en specifikation, kan du bygge og forbruge GraphQL API'er i ethvert server-side programmeringssprog, inklusive Go.
Kom godt i gang med GraphQL API'er i Go
GraphQL er baseret på HTTP-arkitektur, og Go giver HTTP-funktionalitet i dens indbyggede http pakke.
Du kan bruge http pakke til forbruge RESTful API'er i Goblandt andre funktioner. For GraphQL kan du lave forespørgsler og mutationer til GraphQL APIs servere med http pakke og andre indbyggede pakker.
GraphQL klientpakker som Maskinkasse eller shurCooL's gør processen med at interagere med GraphQL API'er endnu nemmere.
Du kan bruge http pakke uden nogen afhængigheder til at interagere med en GraphQL API. Importer disse pakker i din Go-fil for at begynde:
importere (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"tid"
)
Du vil bruge bytes pakke for at oprette en ny buffer til anmodningen og json pakke til at samle et kort til JSON-anmodningslegemet. Du kan bruge ioutil at læse svarteksten, og tid pakke for at angive en tidsgrænse for anmodningen.
Forespørgsel på GraphQL API'er med Go
Der er mange gratis offentlige GraphQL API'er, du kan forespørge på og integrere i dine applikationer. Til denne artikel vil du forespørge Apollo GraphQL's Countries API for at forespørge data om lande over hele verden.
Alle GraphQL-operationer er typisk POST-anmodninger, da de skal have en nyttelast (anmodningstekst). De fleste GraphQL API'er accepterer JSON-anmodningstekst som indholdstype, og Go giver funktionalitet til brug af kort og strukturer til at arbejde med JSON.
Du skal studere strukturen af GraphQL-skemaet for at forespørge API'et. Forespørgslen vil være den samme som en almindelig GraphQL-forespørgsel, bortset fra at operationen (forespørgsel eller mutation) er nøglen, og dataene er kortets værdi.
Sådan kan du erklære en JSON-kortinstans, som du vil samle ind i JSON for anmodningen.
jsonMapInstance := kort[snor]snor {
"forespørgsel": `
{
lande {
navn,
telefon,
betalingsmiddel,
kode,
emoji
}
}
`,
}
Det jsonMapInstance variabel er kortforekomsten for anmodningens krop. Værdien er en streng af de forespørgselsdata, du forventer fra API'en. I dette tilfælde, de forespørgselsdata, du forventer fra API'erne lande skema er navn, telefon, betalingsmiddel, kode, og emoji felter.
Du kan bruge Marskal metoden til json pakke til at kode kortforekomsten til JSON. Det Marskal metoden returnerer den kodede JSON og en fejl for tilfælde med et kodningsproblem.
jsonResultat, fejl := json. Marshal (jsonMapInstance)
hvis fejl!= nul {
fmt. Printf("Der opstod en fejl ved at samle JSON-instansen %v", err)
}
Når du har kodet kortet til JSON, kan du sende POST-anmodningen til API'et. Du kan oprette en ny anmodningsforekomst med Ny anmodning metode, som tager anmodningstype, URL og JSON-buffer ind.
Det Ny anmodning metode returnerer en anmodningsforekomst. Du skal indstille indholdstypen afhængigt af API'ens specifikationer. Du kan indstille indholdstypen for HTTP-anmodninger med Sæt metoden til Header metoden for din anmodningsinstans.
newRequest, fejl := http. NewRequest("POST", "https://countries.trevorblades.com/graphql", bytes. NewBuffer (jsonResult))
nyForespørgsel. Header. Set("Content-Type", "application/json")
Du kan oprette en simpel HTTP-klient til din anmodning med Klient metoden for HTTP-pakken. Det Klient metode giver dig også mulighed for at indstille en tidsgrænse for din anmodning med tid pakke.
klient := &http. Klient{Timeout: tid. Anden * 5}
svar, fejl := klient. Gør (nyanmodning)
hvis fejl!= nul {
fmt. Printf("Der opstod en fejl under udførelse af anmodningen%v", err)
}
Når du har erklæret HTTP-klienten, skal du udføre din API-anmodning med Gør metode. Det Gør metode accepterer anmodningsforekomsten og returnerer svaret og en fejl.
Du kan læse svaret på API-anmodningen med ioutil pakkens LæsAlle metode. Den tager en outputstrøm ind og returnerer en byte udsnit af dataene med en fejl, som du kan håndtere.
responseData, fejl := ioutil. Læs Alle (svar. Legeme)
hvis fejl!= nul {
fmt. Printf("Datalæsefejl%v", fejl)
}
Med den indbyggede strengfunktion kan du konvertere byte-slice-svaret til strengtypen.
fmt. Println(snor(responsdata))
Her er et svar, der viser resultatet af API-anmodningen:
At forbruge RESTful API'er er som at forbruge GraphQL API'er
Da både REST og GraphQL API'er bruger HTTP-protokollen, er forbrug af hver en meget lignende proces, og du kan bruge http pakke til begge tilfælde.
Du skal oprette klienter, anmode om forekomster og læse dataene med de samme pakker.