Graph Query Language (GraphQL) je jazyk a specifikace pro interakci s GraphQL API, architekturou klient-server založenou na HTTP pro komunikaci přes web.

Facebook vydal GraphQL jako alternativu k architektonickému standardu REST. GraphQL řeší většinu problémů s REST bezstavovým způsobem, který lze uložit do mezipaměti. Poskytuje jednoduchou a intuitivní syntaxi, která popisuje očekávaný výstup (y) nebo vstup (y), a rozhraní API přenáší data odpovídající požadavku.

Vzhledem k tomu, že GraphQL je specifikace, můžete vytvářet a používat rozhraní API GraphQL v jakémkoli programovacím jazyce na straně serveru, včetně Go.

Začínáme s GraphQL API v Go

GraphQL je založen na architektuře HTTPa Go poskytuje ve své vestavěné funkci HTTP http balík.

Můžete použít http zabalit do využívat RESTful API v Go, mimo jiné funkce. Pro GraphQL můžete provádět dotazy a mutace na servery GraphQL API pomocí http balíček a další vestavěné balíčky.

Klientské balíčky GraphQL jako Machinebox's nebo shurCooL's ještě více zjednodušit proces interakce s GraphQL API.

instagram viewer

Můžete použít http balíček bez jakýchkoli závislostí pro interakci s GraphQL API. Začněte importem těchto balíčků do souboru Go:

import (
"bajty"
"kódování/json"
"fmt"
"io/ioutil"
"net/http"
"čas"
)

Budete používat bajtů balíček k vytvoření nové vyrovnávací paměti pro požadavek a soubor json balíček k seřazení mapy do těla požadavku JSON. Můžeš použít ioutil přečíst tělo odpovědi a čas balíček pro nastavení časového limitu pro žádost.

Dotazování rozhraní GraphQL API s Go

Existuje mnoho bezplatných veřejných rozhraní API GraphQL, která můžete dotazovat a integrovat do svých aplikací. V tomto článku se dotážete na rozhraní API pro země Apollo GraphQL pro dotazování na data o zemích po celém světě.

Všechny operace GraphQL jsou typicky požadavky POST, protože musí mít užitečné zatížení (tělo požadavku). Většina rozhraní GraphQL API přijímá tělo požadavku JSON jako typ obsahu a Go poskytuje funkce pro použití map a struktur pro práci s JSON.

Budete si muset prostudovat strukturu schématu GraphQL, abyste se mohli dotazovat na API. Dotaz bude stejný jako běžný dotaz GraphQL kromě toho, že operace (dotaz nebo mutace) je klíčem a data jsou hodnotou mapy.

Zde je návod, jak můžete deklarovat instanci mapy JSON, kterou pro požadavek zařadíte do JSON.

jsonMapInstance := mapa[tětiva]tětiva {
"dotaz": `
{
země {
název,
telefon,
měna,
kód,
emotikony
}
}
`,
}

The jsonMapInstance proměnná je instance mapy pro tělo požadavku. Hodnota je řetězec dat dotazu, který očekáváte od rozhraní API. V tomto případě data dotazu, která očekáváte od rozhraní API zemí schéma jsou název, telefon, měna, kód, a emotikony pole.

Můžete použít Maršál metoda json balíček pro zakódování instance mapy do JSON. The Maršál metoda vrací zakódovaný JSON a chybu pro případy s problémem s kódováním.

jsonResult, chyba := json. Marshal (jsonMapInstance)

-li chyba!= nula {
fmt. Printf("Došlo k chybě při zařazování instance JSON %v", err)
}

Jakmile mapu zakódujete do JSON, můžete odeslat požadavek POST do rozhraní API. Můžete vytvořit novou instanci požadavku pomocí Nová žádost metoda, která přebírá typ požadavku, adresu URL a vyrovnávací paměť JSON.

The Nová žádost metoda vrací instanci požadavku. Budete muset nastavit typ obsahu v závislosti na specifikacích API. Typ obsahu pro požadavky HTTP můžete nastavit pomocí Soubor metoda Záhlaví metoda instance vašeho požadavku.

newRequest, err := http. NewRequest("POST", "https://country.trevorblades.com/graphql", bajtů. NewBuffer (jsonResult))
nová žádost. Záhlaví. Set("Content-Type", "application/json")

Pro svůj požadavek můžete vytvořit jednoduchého HTTP klienta pomocí Klient metoda balíčku HTTP. The Klient metoda také umožňuje nastavit časový limit pro váš požadavek pomocí čas balík.


klient := &http. Klient{Časový limit: čas. Druhý * 5}
odpověď, chyba := klient. Udělat (nový požadavek)

-li chyba!= nula {
fmt. Printf("Došlo k chybě při provádění požadavku%v", err)
}

Poté, co deklarujete klienta HTTP, spusťte požadavek API pomocí Dělat metoda. The Dělat metoda přijme instanci požadavku a vrátí odpověď a chybu.

Odpověď na požadavek API si můžete přečíst pomocí ioutil balíček Přečíst vše metoda. Vezme výstupní proud a vrátí bajtovou část dat s chybou, kterou zvládnete.

responseData, err := ioutil. ReadAll (odpověď. Tělo)

-li chyba!= nula {
fmt. Printf("Chyba čtení dat%v", chyba)
}

Pomocí vestavěné funkce řetězce můžete převést odpověď bajtového řezu na typ řetězce.

fmt. Println(tětiva(responseData))

Zde je odpověď ukazující výsledek požadavku API:

Spotřeba RESTful API je jako spotřeba GraphQL API

Vzhledem k tomu, že jak REST, tak GraphQL API používají protokol HTTP, je použití každého z nich velmi podobný proces a můžete použít http balíček pro oba případy.

Budete muset vytvořit klienty, požadovat instance a číst data se stejnými balíčky.