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.
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.