Graph Query Language (GraphQL) is een taal en specificatie voor interactie met GraphQL API's, een op HTTP gebaseerde client-serverarchitectuur voor communicatie via internet.

Facebook heeft GraphQL uitgebracht als alternatief voor de REST-architectuurstandaard. GraphQL lost de meeste problemen met REST op een staatloze en cachebare manier op. Het biedt een eenvoudige en intuïtieve syntaxis die de verwachte uitvoer(en) of invoer(en) beschrijft, en de API geeft de gegevens door die overeenkomen met het verzoek.

Aangezien GraphQL een specificatie is, kunt u GraphQL API's bouwen en gebruiken in elke programmeertaal aan de serverzijde, inclusief Go.

Aan de slag met GraphQL API's in Go

GraphQL is gebaseerd op HTTP-architectuur, en Go biedt HTTP-functionaliteit in de ingebouwde http pakket.

U kunt de http pakket naar gebruik RESTful API's in Go, onder andere kenmerken. Voor GraphQL kunt u query's en mutaties maken op GraphQL API's-servers met de http pakket en andere ingebouwde pakketten.

GraphQL-clientpakketten zoals

instagram viewer
Machineboxen of shurCooL's maken het proces van interactie met GraphQL API's nog eenvoudiger.

U kunt de http pakket zonder afhankelijkheden om te communiceren met een GraphQL API. Importeer deze pakketten in uw Go-bestand om te beginnen:

importeren (
"bytes"
"codering/json"
"fmt"
"io/ioutil"
"net/http"
"tijd"
)

Je gebruikt de bytes pakket om een ​​nieuwe buffer aan te maken voor het verzoek en het json pakket om een ​​kaart naar de JSON-verzoekinstantie te sturen. Je kunt gebruiken ioutil om de hoofdtekst van het antwoord te lezen, en de tijd pakket om een ​​tijdslimiet voor het verzoek in te stellen.

Vraag stellen aan GraphQL API's met Go

Er zijn veel gratis openbare GraphQL API's die u kunt opvragen en integreren in uw toepassingen. Voor dit artikel vraagt ​​u de landen-API van Apollo GraphQL om gegevens over landen over de hele wereld op te vragen.

Alle GraphQL-bewerkingen zijn doorgaans POST-verzoeken, omdat ze een payload (verzoeklichaam) moeten hebben. De meeste GraphQL API's accepteren JSON-aanvraagtekst als het inhoudstype, en Go biedt functionaliteit voor het gebruik van kaarten en structuren om met JSON te werken.

U moet de structuur van het GraphQL-schema bestuderen om de API te doorzoeken. De query is hetzelfde als een gewone GraphQL-query, behalve dat de bewerking (query of mutatie) de sleutel is en de gegevens de waarde van de kaart.

Hier leest u hoe u een JSON-kaartinstantie kunt declareren die u voor het verzoek naar JSON zult sturen.

jsonMapInstance := kaart[snaar]snaar {
"vraag": `
{
landen {
naam,
telefoon,
munteenheid,
code,
emoji
}
}
`,
}

De jsonMapInstance variabele is de kaartinstantie voor de hoofdtekst van het verzoek. De waarde is een tekenreeks van de querygegevens die u van de API verwacht. In dit geval de querygegevens die u van de API's mag verwachten landen schema zijn de naam, telefoon, munteenheid, code, En emoji velden.

U kunt de Maarschalk methode van de json pakket om de kaartinstantie naar JSON te coderen. De Maarschalk methode retourneert de gecodeerde JSON en een fout voor gevallen met een coderingsprobleem.

jsonResult, fout := json. Maarschalk (jsonMapInstance)

als fout!= nihil {
fmt. Printf("Er is een fout opgetreden bij het rangschikken van de JSON-instantie %v", err)
}

Nadat u de kaart naar JSON heeft gecodeerd, kunt u het POST-verzoek naar de API sturen. U kunt een nieuwe aanvraaginstantie maken met de Nieuw verzoek methode, die het verzoektype, de URL en de JSON-buffer opneemt.

De Nieuw verzoek methode retourneert een verzoekinstantie. U moet het inhoudstype instellen, afhankelijk van de specificaties van de API. U kunt het inhoudstype voor HTTP-verzoeken instellen met de Set methode van de Koptekst methode van uw verzoekinstantie.

newRequest, fout := http. NewRequest("POST", "https://countries.trevorblades.com/graphql", bytes. NewBuffer (jsonResult))
Nieuw verzoek. Koptekst. Set("Content-Type", "application/json")

U kunt een eenvoudige HTTP-client voor uw verzoek maken met de Cliënt methode van het HTTP-pakket. De Cliënt methode stelt u ook in staat om een ​​tijdslimiet voor uw verzoek in te stellen met de tijd pakket.


klant := &http. Client{Time-out: tijd. Seconde * 5}
reactie, err := klant. Doen (newRequest)

als fout!= nihil {
fmt. Printf("Er is een fout opgetreden bij het uitvoeren van het verzoek%v", err)
}

Nadat u de HTTP-client hebt gedeclareerd, voert u uw API-verzoek uit met de Doen methode. De Doen methode accepteert de aanvraaginstantie en retourneert het antwoord en een fout.

U kunt de reactie van het API-verzoek lezen met de ioutil pakketjes Alles lezen methode. Het neemt een uitvoerstroom op en retourneert een bytesegment van de gegevens met een fout die u aankan.

responseData, fout := ioutil. Alles lezen (antwoord. Lichaam)

als fout!= nihil {
fmt. Printf("Gegevens leesfout%v", err)
}

Met de ingebouwde stringfunctie kunt u de byte slice-respons converteren naar het stringtype.

fmt. Println(snaar(responseData))

Hier is een antwoord dat het resultaat van het API-verzoek laat zien:

Het consumeren van RESTful API's is als het consumeren van GraphQL API's

Aangezien zowel REST- als GraphQL-API's het HTTP-protocol gebruiken, is het gebruik van elk een vergelijkbaar proces en kunt u de http pakket voor beide gevallen.

U moet clients maken, instanties aanvragen en de gegevens lezen met dezelfde pakketten.