Čitatelia ako vy pomáhajú podporovať MUO. Keď uskutočníte nákup pomocou odkazov na našej stránke, môžeme získať pridruženú províziu.

GraphQL je špecifikácia založená na HTTP, ktorá rieši väčšinu problémov, s ktorými sa stretnete pri vytváraní RESTful API. Je vhodný na vytváranie zložitých rozhraní API, pretože na prístup k údajom z mnohých schém môžete použiť jeden koncový bod.

GraphQL zmierňuje problémy, ako je nadmerné a nedostatočné načítanie v REST. Môžete vytvoriť klienta, ktorý požaduje špecifické polia, bez toho, aby ste museli vykonávať ďalšie volania API.

Existuje niekoľko balíkov Go, ktoré môžete využiť na vytváranie aplikácií založených na GraphQL, od serverov po API.

1. Balík gqlgen

gqlgen (GraphQL Generator) je funkčne bohatý, typovo bezpečný balík na generovanie a zostavovanie serverov a rozhraní API GraphQL.

Balík gqlgen využíva prístup založený na schéme, pomocou ktorého na definovanie schémy používate GraphQL SDL. Potom vygeneruje štandardný kód, ktorý môžete upraviť, aby ste nastavili váš server GraphQL a rozhranie API.

instagram viewer

gqlgen je jedným z najkompletnejších balíkov GraphQL ekosystém Go. Pomocou balíka môžete generovať dokumentáciu a príklady a vytvárať dotazy, mutácie a predplatné.

gqlgen zabezpečuje viazanie typov, vkladanie, rozhrania, generované vstupy a zoznamy. Balík tiež poskytuje funkcie pre otvorené sledovanie, háčiky na protokolovanie chýb, načítanie údajov, súbežnosť a zvýšenú zložitosť dotazov.

Po zadefinovaní schémy GraphQL – ako by ste to urobili pri akejkoľvek knižnici prvej schémy – použijete aplikáciu príkazového riadka gqlgen na vygenerovanie štandardného kódu zo schémy vo vašom projekte.

Vytvor tools.go súbor vo vašom pracovnom adresári a pridajte tieto riadky kódu na zahrnutie súboru gqlgen balík:

// +nástroje na zostavenie

balík nástrojov

importovať _ "github.com/99designs/gqlgen"

The tools.go súbor špecifikuje zostavovacie nástroje pre gqlgen balík.

Ak chcete nainštalovať balík gqlgen a jeho závislosti, spustite tieto príkazy vo svojom pracovnom adresári:

ísť nainštalovať github.com/99designs/gqlgen@latest
ísť mod uprataný

Môžete inicializovať nový projekt GraphQL, keď spustíte balík GraphQL s init príkaz ako argument:

ísť spustiť github.com/99designs/gqlgen init

Budete musieť mať svoju schému v a schema.graphql súbor umiestnený vo vašom pracovnom adresári na inicializáciu projektu.

Spustite server.go súbor na spustenie servera GraphQL po pridaní funkcií do aplikácie GraphQL:

ísť spustiť server.ísť

2. Balík graphql-go

Balík graphql-go je populárna knižnica GraphQL, ktorej cieľom je poskytnúť kompletné Špecifikácia návrhu GraphQL na budovanie služieb GraphQL v Go.

Balík graphql-go využíva prístup typu runtime; máte možnosť deklarovať svoju schému v kóde Go a balík sa skontroluje počas behu.

Pomocou balíka môžete implementovať dotazy, mutácie a predplatné a generovať príklady, ale neexistuje žiadna funkcia pre generované zoznamy, vstupy alebo otvorené sledovanie.

graphql-go obsahuje minimálne API s podporou pre vstavané balíčky aj pre obľúbené balíčky tretích strán. Má podporu pre OpenTelemetry a OpenTracing štandardy, kontrola typu schém oproti resolverom, paralelné vykonávanie resolverov a mnoho ďalších funkcií.

Ak ste oboznámení s budovanie RESTful služieb v Go with the http balík, zistíte, že balík graphql-go sa ľahko používa.

Spustite tieto príkazy vo svojom pracovnom adresári a pridajte balík graphql-go a jeho závislosti do vášho projektu:

ísť získať github.com/graph-gophers/graphql-ísť

Tu je príklad spustenia jednoduchého servera GraphQL:

balík Hlavná

importovať (
"log"
"net/http"

graphql "github.com/graph-gophers/graphql-ísť"
"github.com/graph-gophers/graphql-ísť/relay"
)

typu dopyt štrukturovať{}

func(_ *dopyt)Ahoj()reťazec { vrátiť "Ahoj, svet!" }

funcHlavná() {
príklad schémy := `
typu Dopyt {
ahoj: struna!
}
`

schéma := graphql. MustParseSchema (príklad schémy, &dotaz{})
http. Handle("/query", &relé. Handler{Schema: schéma})
log. Fatálne (http. Počúvaj a podávaj(":8080", nula))
}

The Ahoj metóda dopyt struct je resolver pre koncový bod GraphQL, ktorý vracia hello world. The schemaPríklad premenná je definícia schémy a server bude bežať na porte 8080 s http balíka Počúvajte a podávajte metóda.

3. Thunder Package

The Hrom framework využíva prístup struct first; deklarujete štruktúru, ktorá modeluje vašu schému GraphQL. To generuje Schéma GraphQL z údajov Prejsť na spracovanie dávkovania dotazov, živých dotazov, mutácií, odberov a generovania príkladov.

Thunder poskytuje bezpečnosť typu s typovými väzbami a ďalšími funkciami vrátane vytvárania schém založených na reflexii, vstavané paralelné vykonávanie a dávkovanie, vstavaný editor GraphiQL a rozdelené schémy pre väčšie GraphQL serverov.

Balík Thunder neobsahuje žiadne funkcie pre vkladanie, rozhrania, generované zoznamy alebo vstupy, federáciu, otvorené sledovanie ani vlastné chyby. Je však jedným z najjednoduchších na použitie v porovnaní s inými populárnymi balíkmi a je vynikajúcim štartovacím balíkom, ak nemáte skúsenosti s GraphQL.

Na inštaláciu balíka Thunder a jeho závislostí budete musieť spustiť tento príkaz v termináli vášho pracovného adresára:

ísť získajte github.com/samsarahq/thunder/graphql

Ak chcete spustiť jednoduchý server GraphQL s balíkom Thunder, budete musieť deklarovať model štruktúry pre schému, napísať resolvery a vytvoriť inštanciu servera.

importovať (
"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"
)

typu príspevok štrukturovať {
Názov reťazec
Telo reťazec
Vytvorené v čase. Čas
}

// server je náš graphql server.
typu server štrukturovať {
príspevky []príspevok
}

// registerQuery zaregistruje koreňový typ dotazu.
func(s *server)registerQuery(schéma *schemabuilder. schéma) {
obj := schéma. Dopyt()

obj. FieldFunc("príspevky", func() []príspevok {
vrátiť s.posts
})
}

// registerMutation registruje koreňový typ mutácie.
func(s *server)registerMutácia(schéma *schemabuilder. schéma) {
obj := schéma. Mutácia()

obj. FieldFunc("echo", func(arg štrukturovať{ Správa reťazec })reťazec {
vrátiť args. Správa
})
}

// registerPost zaregistruje typ príspevku.
func(s *server)registerPost(schéma *schemabuilder. schéma) {
obj := schéma. Object("Príspevok", príspevok{})

obj. FieldFunc("vek", func(kontext ctx. Kontext, p *príspevok)reťazec {
reaktívny. InvalidateAfter (ctx, 5*čas. druhý)
vrátiť čas. Keďže (str. CreatedAt).String()
})
}

// schéma vytvorí schému graphql.
func(s *server)schému() *graphql.Schéma {
builder := schemabuilder. NewSchema()
s.registerQuery (staviteľ)
s.registerMutation (staviteľ)
s.registerPost (staviteľ)
vrátiť staviteľ. MustBuild()
}

funcHlavná() {
// Vytvorenie inštancie servera, vytvorenie servera a zobrazenie schémy na porte 3030.
server := &server{
príspevky: []príspevok{
{Title: "first post!", Body: "Bol som tu prvý!", CreatedAt: time. Teraz()},
{Title: "graphql", Body: "Počuli ste o Thunder?", CreatedAt: time. Teraz()},
},
}

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

// Odhalenie schémy a grafiql.
http. Handle("/graphql", graphql. Obslužný program (schéma))
http. Handle("/graphiql/", http. StripPrefix("/graphiql/", graphiql. Handler()))
http. Počúvaj a podávaj(":3030", nula)
}

The príspevok struct je model pre schému GraphQL a server struct je inštancia servera. The registerQuery, registerMutácia, a registerPost metódy sú resolver funkcie pre dotazy, mutácie a ukladanie dát.

The Hlavná funkcia začína serverom GraphQL na porte 3030 a editor GraphQL.

Môžete sa dotazovať na GraphQL API v Go With Built-In Packages

GraphQL je založený na HTTP a pomocou vstavaného rozhrania môžete využívať GraphQL API http balík a ďalšie balíky podobné RESTful API. V ekosystéme Go sú aj balíčky, ktoré vám umožnia rýchlo využívať GraphQL API.