Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti.

GraphQL je specifikace založená na HTTP, která řeší většinu problémů, na které narazíte při vytváření RESTful API. Je vhodný pro vytváření složitých rozhraní API, protože můžete použít jeden koncový bod pro přístup k datům z mnoha schémat.

GraphQL zmírňuje problémy, jako je nadměrné načítání a nedostatečné načítání v REST. Můžete sestavit klienta, který požaduje konkrétní pole, aniž byste museli provádět další volání API.

Existuje několik balíčků Go, které můžete využít k sestavení aplikací založených na GraphQL, od serverů po API.

1. Balíček gqlgen

gqlgen (GraphQL Generator) je funkčně bohatý, typově bezpečný balíček pro generování a sestavování serverů GraphQL a rozhraní API.

Balíček gqlgen využívá schéma-first přístup, pomocí kterého použijete GraphQL SDL k definování vašeho schématu. Poté vygeneruje standardní kód, který můžete upravit pro nastavení serveru GraphQL a rozhraní API.

instagram viewer

gqlgen je jedním z nejúplnějších balíčků GraphQL ekosystém Go. Pomocí balíčku můžete generovat dokumentaci a příklady a vytvářet dotazy, mutace a předplatná.

gqlgen zajišťuje typové vazby, vkládání, rozhraní, generované vstupy a výčty. Balíček také poskytuje funkce pro otevřené trasování, háčky pro protokolování chyb, načítání dat, souběžnost a zvýšenou složitost dotazů.

Po definování schématu GraphQL – stejně jako u jakékoli knihovny s prvním schématem – použijete aplikaci příkazového řádku gqlgen k vygenerování standardního kódu ze schématu ve vašem projektu.

Vytvořit tools.go soubor ve vašem pracovním adresáři a přidejte tyto řádky kódu, abyste zahrnuli soubor gqlgen balík:

// +nástroje pro tvorbu

balík nástroje

import _ "github.com/99designs/gqlgen"

The tools.go soubor určuje sestavení nástroje pro gqlgen balík.

Spuštěním těchto příkazů ve svém pracovním adresáři nainstalujte balíček gqlgen a jeho závislosti:

jít nainstalovat github.com/99designs/gqlgen@latest
jít mod uklizený

Nový projekt GraphQL můžete inicializovat, když spustíte balíček GraphQL s init příkaz jako argument:

jít spustit github.com/99designs/gqlgen init

Budete muset mít své schéma v a schema.graphql soubor umístěný ve vašem pracovním adresáři pro inicializaci projektu.

Spusťte server.go soubor pro spuštění serveru GraphQL po přidání funkcí do aplikace GraphQL:

jít spustit server.jít

2. Balíček graphql-go

Balíček graphql-go je populární knihovna GraphQL, která si klade za cíl poskytovat kompletní Specifikace návrhu GraphQL pro budování služeb GraphQL v Go.

Balíček graphql-go využívá přístup typu runtime; máte možnost deklarovat své schéma v kódu Go a balíček se zkontroluje za běhu.

S balíčkem můžete implementovat dotazy, mutace a předplatná a generovat příklady, ale neexistuje žádná funkce pro generované výčty, vstupy nebo otevřené trasování.

graphql-go obsahuje minimální API s podporou jak pro vestavěné balíčky, tak pro oblíbené balíčky třetích stran. Má podporu pro OpenTelemetry a OpenTracing standardy, kontrola typu schématu proti resolverům, paralelní provádění resolverů a mnoho dalších funkcí.

Pokud jste obeznámeni s budování RESTful služeb v Go with the http balík, zjistíte, že použití balíčku graphql-go je snadné.

Spuštěním těchto příkazů ve svém pracovním adresáři přidejte balíček graphql-go a jeho závislosti do svého projektu:

jít získat github.com/graph-gophers/graphql-jít

Zde je příklad spuštění jednoduchého serveru GraphQL:

balík hlavní

import (
"log"
"net/http"

graphql "github.com/graph-gophers/graphql-jít"
"github.com/graph-gophers/graphql-jít/relay"
)

typ dotaz strukturovat{}

func(_ *dotaz)Ahoj()tětiva { vrátit se "Ahoj světe!" }

funchlavní() {
schemaPříklad := `
typ Dotaz {
ahoj: Řetězec!
}
`

schéma := graphql. MustParseSchema (schemaExample, &query{})
http. Handle("/query", &relay. Handler{Schema: schéma})
log. Fatální (http. ListenAndServe(":8080", nula))
}

The Ahoj metoda dotaz struct je resolver pro koncový bod GraphQL, který vrací hello world. The schemaPříklad proměnná je definice schématu a server poběží na portu 8080 s http balíček ListenAndServe metoda.

3. Thunder Package

The Hrom framework používá přístup struct first; deklarujete strukturu, která modeluje vaše schéma GraphQL. To generuje Schéma GraphQL z dat Go pro zpracování dávek dotazů, živých dotazů, mutací, předplatných a generování příkladů.

Thunder poskytuje bezpečnost typu s vazbami typu a dalšími funkcemi, včetně vytváření schémat na základě reflexe, vestavěné paralelní provádění a dávkování, vestavěný editor GraphiQL a rozdělená schémata pro větší GraphQL servery.

Balíček Thunder neobsahuje žádné funkce pro vkládání, rozhraní, generované výčty nebo vstupy, federaci, otevřené trasování ani vlastní chyby. Je však jedním z nejjednodušších k použití ve srovnání s jinými oblíbenými balíčky a je vynikajícím výchozím balíčkem, pokud nemáte žádné zkušenosti s GraphQL.

Chcete-li nainstalovat balíček Thunder a jeho závislosti, budete muset spustit tento příkaz v terminálu vašeho pracovního adresáře:

jít získat github.com/samsarahq/thunder/graphql

Chcete-li spustit jednoduchý server GraphQL s balíčkem Thunder, budete muset deklarovat model struktury pro schéma, napsat resolvery a vytvořit instanci serveru.

import (
"kontext"
"net/http"
"čas"

"github.com/samsarahq/thunder/graphql"
"github.com/samsarahq/thunder/graphql/graphiql"
"github.com/samsarahq/thunder/graphql/introspection"
"github.com/samsarahq/thunder/graphql/schemabuilder"
"github.com/samsarahq/thunder/reactive"
)

typ pošta strukturovat {
Titul tětiva
Tělo tětiva
VytvořenoV čase. Čas
}

// server je náš graphql server.
typ server strukturovat {
příspěvky []příspěvky
}

// registerQuery registruje kořenový typ dotazu.
func(s *server)registerQuery(schéma *schemabuilder. Schéma) {
obj := schéma. Dotaz()

obj. FieldFunc("příspěvky", func() []pošta {
vrátit se s.příspěvky
})
}

// registerMutation registruje typ kořenové mutace.
func(s *server)registrMutace(schéma *schemabuilder. Schéma) {
obj := schéma. Mutace()

obj. FieldFunc("echo", func(argumenty strukturovat{ Zpráva tětiva })tětiva {
vrátit se argumenty. Zpráva
})
}

// registerPost zaregistruje typ příspěvku.
func(s *server)registrPost(schéma *schemabuilder. Schéma) {
obj := schéma. Object("Příspěvek", příspěvek{})

obj. FieldFunc("věk", func(kontext ctx. Kontext, p *příspěvek)tětiva {
reaktivní. InvalidateAfter (ctx, 5*čas. Druhý)
vrátit se čas. Protože (str. CreatedAt).String()
})
}

// schéma vytvoří schéma graphql.
func(s *server)schéma() *graphql.Schéma {
builder := schemabuilder. NewSchema()
s.registerQuery (tvůrce)
s.registerMutation (stavitel)
s.registerPost (stavitel)
vrátit se stavitel. MustBuild()
}

funchlavní() {
// Vytvořte instanci serveru, vytvořte server a poskytněte schéma na portu 3030.
server := &server{
příspěvky: []příspěvek{
{Title: "first post!", Body: "I was here first!", CreatedAt: time. Nyní()},
{Title: "graphql", Body: "slyšeli jste o Thunder?", CreatedAt: time. Nyní()},
},
}

schema := server.schema()
introspekce. AddIntrospectionToSchema (schéma)

// Vystavit schéma a graphiql.
http. Handle("/graphql", graphql. Obslužný program (schéma))
http. Handle("/graphiql/", http. StripPrefix("/graphiql/", graphiql. Psovod()))
http. ListenAndServe(":3030", nula)
}

The pošta struct je modelem pro schéma GraphQL a server struct je instance serveru. The registerQuery, registrMutace, a registrPost metody jsou resolverové funkce pro dotazy, mutace a ukládání dat.

The hlavní funkce začíná serverem GraphQL na portu 3030 a editor GraphQL.

Můžete se dotazovat na GraphQL API v Go With Built-In Packages

GraphQL je založen na HTTP a můžete používat GraphQL API s vestavěným http balíček a další balíčky podobné RESTful API. V ekosystému Go jsou také balíčky, které vám umožní rychle využívat GraphQL API.