Graph Query Language (GraphQL) ist eine Sprache und Spezifikation für die Interaktion mit GraphQL-APIs, einer HTTP-basierten Client-Server-Architektur für die Kommunikation über das Internet.

Facebook hat GraphQL als Alternative zum REST-Architekturstandard veröffentlicht. GraphQL löst die meisten Probleme mit REST auf zustandslose und zwischenspeicherbare Weise. Es bietet eine einfache und intuitive Syntax, die die erwartete(n) Ausgabe(n) oder Eingabe(n) beschreibt, und die API leitet die Daten weiter, die der Anfrage entsprechen.

Da GraphQL eine Spezifikation ist, können Sie GraphQL-APIs in jeder serverseitigen Programmiersprache, einschließlich Go, erstellen und nutzen.

Erste Schritte mit GraphQL-APIs in Go

GraphQL basiert auf der HTTP-Architektur, und Go bietet HTTP-Funktionalität in seiner integrierten http Paket.

Du kannst den... benutzen http Paket zu RESTful-APIs in Go verwenden, neben anderen Merkmalen. Für GraphQL können Sie Abfragen und Mutationen an GraphQL-APIs-Server mit dem vornehmen http Paket und andere integrierte Pakete.

instagram viewer

GraphQL-Client-Pakete wie Maschinenboxen oder shurCools den Prozess der Interaktion mit GraphQL-APIs noch einfacher machen.

Du kannst den... benutzen http Paket ohne Abhängigkeiten zur Interaktion mit einer GraphQL-API. Importieren Sie diese Pakete in Ihre Go-Datei, um zu beginnen:

importieren (
"Bytes"
"Codierung/json"
"fmt"
"io/ioutil"
"net/http"
"Zeit"
)

Sie verwenden die Bytes Paket, um einen neuen Puffer für die Anfrage und die zu erstellen json -Paket, um eine Zuordnung zum JSON-Anforderungstext zu marshallen. Sie können verwenden ioutil um den Antworttext zu lesen, und die Zeit Paket, um eine Frist für die Anfrage festzulegen.

Abfragen von GraphQL-APIs mit Go

Es gibt viele kostenlose öffentliche GraphQL-APIs, die Sie abfragen und in Ihre Anwendungen integrieren können. Für diesen Artikel fragen Sie die Länder-API von Apollo GraphQL ab, um Daten zu Ländern weltweit abzufragen.

Alle GraphQL-Operationen sind typischerweise POST-Anfragen, da sie eine Nutzlast (Anfragetext) haben müssen. Die meisten GraphQL-APIs akzeptieren den JSON-Anfragetext als Inhaltstyp und Go bietet Funktionen für die Verwendung von Karten und Strukturen für die Arbeit mit JSON.

Sie müssen die Struktur des GraphQL-Schemas studieren, um die API abzufragen. Die Abfrage ist die gleiche wie eine normale GraphQL-Abfrage, außer dass die Operation (Abfrage oder Mutation) der Schlüssel ist und die Daten der Wert der Karte sind.

So können Sie eine JSON-Karteninstanz deklarieren, die Sie für die Anfrage in JSON marshallt.

jsonMapInstance := Karte[Schnur]Schnur {
"Anfrage": `
{
Länder {
Name,
Telefon,
Währung,
Code,
Emoji
}
}
`,
}

Der jsonMapInstance Variable ist die Zuordnungsinstanz für den Text der Anfrage. Der Wert ist eine Zeichenfolge der Abfragedaten, die Sie von der API erwarten. In diesem Fall die Abfragedaten, die Sie von den APIs erwarten Länder Schema sind die Name, Telefon, Währung, Code, Und Emoji Felder.

Du kannst den... benutzen Marschall Methode der json -Paket, um die Karteninstanz in JSON zu codieren. Der Marschall -Methode gibt das codierte JSON und einen Fehler für Fälle mit einem Codierungsproblem zurück.

jsonResult, err := json. Marshall (jsonMapInstance)

Wenn äh != Null {
fmt. Printf("Beim Marshallen der JSON-Instanz %v ist ein Fehler aufgetreten", err)
}

Nachdem Sie die Karte in JSON codiert haben, können Sie die POST-Anforderung an die API senden. Sie können eine neue Anforderungsinstanz mit erstellen Neue Anfrage -Methode, die den Anforderungstyp, die URL und den JSON-Puffer aufnimmt.

Der Neue Anfrage -Methode gibt eine Anforderungsinstanz zurück. Sie müssen den Inhaltstyp abhängig von den Spezifikationen der API festlegen. Sie können den Inhaltstyp für HTTP-Anforderungen mit festlegen Satz Methode der Header -Methode Ihrer Anforderungsinstanz.

newRequest, err := http. NewRequest("POST", "https://countries.trevorblades.com/graphql", Bytes. Neuer Puffer (jsonResult))
neue Anfrage. Header. Set("Content-Type", "application/json")

Mit dem können Sie einen einfachen HTTP-Client für Ihre Anfrage erstellen Klient Methode des HTTP-Pakets. Der Klient Mit der Methode können Sie auch ein Zeitlimit für Ihre Anfrage festlegen Zeit Paket.


Kunde := &http. Client{Timeout: Zeit. Zweite * 5}
Antwort, err := Kunde. Tun (neue Anfrage)

Wenn äh != Null {
fmt. Printf("Beim Ausführen der Anfrage ist ein Fehler aufgetreten%v", err)
}

Nachdem Sie den HTTP-Client deklariert haben, führen Sie Ihre API-Anfrage mit der aus Tun Methode. Der Tun -Methode akzeptiert die Anforderungsinstanz und gibt die Antwort und einen Fehler zurück.

Sie können die Antwort der API-Anforderung mit dem lesen ioutil Pakete Lese alles Methode. Es nimmt einen Ausgabestrom auf und gibt einen Byte-Slice der Daten mit einem Fehler zurück, den Sie behandeln können.

Antwortdaten, err := ioutil. ReadAll (Antwort. Körper)

Wenn äh != Null {
fmt. Printf("Datenlesefehler%v", err)
}

Mit der integrierten String-Funktion können Sie die Byte-Slice-Antwort in den String-Typ konvertieren.

fmt. Println(Schnur(Antwortdaten))

Hier ist eine Antwort, die das Ergebnis der API-Anfrage zeigt:

Die Nutzung von RESTful-APIs ist wie die Nutzung von GraphQL-APIs

Da sowohl REST- als auch GraphQL-APIs das HTTP-Protokoll verwenden, ist die Nutzung beider APIs ein sehr ähnlicher Prozess, und Sie können die verwenden http Paket für beide Fälle.

Sie müssen Clients erstellen, Instanzen anfordern und die Daten mit denselben Paketen lesen.