Az Önhöz hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk.

A GraphQL egy HTTP-alapú specifikáció, amely megoldja a legtöbb olyan problémát, amellyel a RESTful felépítése során találkozik API-k. Alkalmas összetett API-k felépítésére, mivel egyetlen végpont használatával több séma adatait is elérheti.

A GraphQL enyhíti az olyan problémákat, mint a túl- és alul- és lehívás a REST-ben. Létrehozhat olyan klienst, amely meghatározott mezőket kér anélkül, hogy extra API-hívásokat kellene indítania.

Számos Go-csomagot használhat GraphQL-alapú alkalmazások készítéséhez, a szerverektől az API-kig.

1. A gqlgen csomag

gqlgen (GraphQL generátor) egy funkciókban gazdag, típusbiztos csomag GraphQL szerverek és API-k generálására és építésére.

A gqlgen csomag séma-első megközelítést alkalmaz, amelynek segítségével a GraphQL SDL-t használja a séma meghatározásához. Ezután létrehozza az alapkódot, amelyet módosíthat a GraphQL-kiszolgáló és az API beállításához.

A gqlgen az egyik legteljesebb GraphQL csomag a Go ökoszisztéma. A csomaggal dokumentációt és példákat hozhat létre, valamint lekérdezéseket, mutációkat és előfizetéseket hozhat létre.

A gqlgen biztosítja a típus-összerendeléseket, a beágyazásokat, az interfészeket, a generált bemeneteket és az enumokat. A csomag a nyílt nyomkövetés funkcióit, a hibanaplózáshoz, az adatbetöltéshez, a párhuzamossághoz és a megnövekedett lekérdezési összetettséghez is nyújt szolgáltatásokat.

A GraphQL-séma meghatározása után – akárcsak bármely séma-first könyvtár esetében – a gqlgen parancssori alkalmazást kell használnia a mintakód létrehozásához a projektben lévő sémából.

Hozzon létre egy eszközök.go fájlt a munkakönyvtárába, és adja hozzá ezeket a kódsorokat a gqlgen csomag:

// +építési eszközök

csomag eszközöket

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

A eszközök.go fájl megadja a build eszközöket a gqlgen csomag.

Futtassa ezeket a parancsokat a munkakönyvtárában a gqlgen csomag és függőségei telepítéséhez:

megy telepítse a github.com/99designs/gqlgen@latest
megy mod takaros

Új GraphQL projektet inicializálhat, ha a GraphQL csomagot a következővel futtatja benne parancs argumentumként:

megy futtassa a github.com/99designs/gqlgen init

A sémát a schema.graphql munkakönyvtárában található fájl a projekt inicializálásához.

Futtassa a szerver.go fájl a GraphQL-kiszolgáló elindításához, miután funkcionalitást adott a GraphQL alkalmazáshoz:

megy szerver futtatása.megy

2. A graphql-go csomag

A graphql-go csomag egy népszerű GraphQL könyvtár, amelynek célja a teljes GraphQL specifikációtervezet GraphQL szolgáltatások kiépítéséhez a Go-ban.

A graphql-go csomag a futásidejű típusok megközelítését alkalmazza; lehetősége van Go kódban deklarálni a sémát, és a csomag ellenőrzi a futásidőt.

Lekérdezéseket, mutációkat és előfizetéseket valósíthat meg, és példákat generálhat a csomaggal, de nincs funkció generált enumokhoz, bemenetekhez vagy nyílt nyomkövetéshez.

A graphql-go minimális API-t tartalmaz, amely támogatja mind a beépített, mind a népszerű harmadik féltől származó csomagokat. Támogatása van a OpenTelemetry és OpenTracing szabványok, sématípus-ellenőrzés a feloldók ellen, a feloldók párhuzamos végrehajtása és sok más szolgáltatás.

Ha ismeri RESTful szolgáltatások kiépítése a Go with the http csomag, a graphql-go csomag könnyen használható.

Futtassa ezeket a parancsokat a munkakönyvtárában, hogy hozzáadja a graphql-go csomagot és annak függőségeit a projekthez:

megy töltse le a github.com/graph-gophers/graphql-megy

Íme egy példa egy egyszerű GraphQL szerver indítására:

csomag fő-

import (
"napló"
"net/http"

graphql "github.com/graph-gophers/graphql-megy"
"github.com/graph-gophers/graphql-megy/relay"
)

típus lekérdezés struct{}

func(_ *lekérdezés)Helló()húr { Visszatérés "Helló Világ!" }

funcfő-() {
sémaPélda := `
típus Lekérdezés {
hello: String!
}
`

séma := graphql. MustParseSchema (schemaExample, &query{})
http. Handle("/query", &relay. Kezelő{Séma: séma})
log. Végzetes (http. ListenAndServe(":8080", nulla))
}

A Helló módszere a lekérdezés A struct a GraphQL végpont feloldója, amely a hello world-t adja vissza. A sémaPélda változó a sémadefiníció, és a szerver a 8080-as porton fog futni a http csomagok ListenAndServe módszer.

3. A Thunder csomag

A Mennydörgés a keretrendszer a struct first megközelítést alkalmazza; deklarál egy struktúrát, amely modellezi a GraphQL sémát. Ez generálja a GraphQL séma a Go adatokból a lekérdezések kötegelése, élő lekérdezések, mutációk, előfizetések és példagenerálás kezelésére.

A Thunder típusbiztonságot nyújt a típuskötésekkel és egyéb szolgáltatásokkal, beleértve a tükrözés alapú sémaépítést, beépített párhuzamos végrehajtás és kötegelés, beépített GraphiQL szerkesztő és osztott sémák a nagyobb GraphQL-hez szerverek.

A Thunder csomagban nincs beágyazás, interfész, generált enum vagy bemenet, összevonás, nyílt nyomkövetés vagy egyéni hibák funkció. Azonban ez az egyik legkönnyebben használható más népszerű csomagokhoz képest, és kiváló kezdőcsomag, ha nincs GraphQL-tapasztalata.

A Thunder csomag és függőségei telepítéséhez ezt a parancsot kell futtatnia a munkakönyvtár termináljában:

megy töltse le a github.com/samsarahq/thunder/graphql webhelyet

Deklarálnia kell a sémához egy struktúramodellt, meg kell írnia a feloldókat, és példányosítania kell a szervert, hogy elindítson egy egyszerű GraphQL-kiszolgálót a Thunder csomaggal.

import (
"kontextus"
"net/http"
"idő"

"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"
)

típus hozzászólás struct {
Cím húr
Test húr
LétrehozvaIdőben. Idő
}

// a szerver a mi graphql szerverünk.
típus szerver struct {
hozzászólások []bejegyzés
}

// A registerQuery a gyökér lekérdezés típusát regisztrálja.
func(s *szerver)registerQuery(séma *sémakészítő. Séma) {
obj := séma. Lekérdezés()

obj. FieldFunc("bejegyzések", func() []hozzászólás {
Visszatérés s.posts
})
}

// registerMutation regisztrálja a gyökérmutáció típusát.
func(s *szerver)registerMutation(séma *sémakészítő. Séma) {
obj := séma. Mutáció()

obj. FieldFunc("echo", func(args struct{ Üzenet húr })húr {
Visszatérés args. Üzenet
})
}

// registerPost regisztrálja a bejegyzés típusát.
func(s *szerver)regisztrációPost(séma *sémakészítő. Séma) {
obj := séma. Object ("Bejegyzés", bejegyzés{})

obj. FieldFunc("életkor", func(ctx kontextus. Kontextus, p *bejegyzés)húr {
reaktív. InvalidateAfter (ctx, 5*idő. Második)
Visszatérés idő. Azóta (o. CreatedAt).String()
})
}

// séma összeállítja a graphql sémát.
func(s *szerver)séma() *graphql.Séma {
builder := sémakészítő. ÚjSéma()
s.registerQuery (készítő)
s.registerMutation (készítő)
s.registerPost (készítő)
Visszatérés építész. MustBuild()
}

funcfő-() {
// Szerver példányosítása, kiszolgáló létrehozása és a séma kiszolgálása a 3030-as porton.
szerver := &szerver{
hozzászólások: []bejegyzés{
{Cím: "első bejegyzés!", Törzs: "Én voltam itt először!", CreatedAt: time. Most()},
{Title: "graphql", Body: "hallottál a Thunderről?", CreatedAt: idő. Most()},
},
}

séma := server.schema()
önelemzés. AddIntrospectionToSchema (séma)

// A séma és a graphiql feltárása.
http. Handle("/graphql", graphql. Kezelő (séma))
http. Handle("/graphiql/", http. StripPrefix("/graphiql/", graphiql. Kezelő()))
http. ListenAndServe(":3030", nulla)
}

A hozzászólás A struct a GraphQL séma modellje, és a szerver A struct a szerver példány. A registerQuery, registerMutation, és regisztrációPost A metódusok a lekérdezések, mutációk és adattárolás feloldó függvényei.

A fő- függvény a porton lévő GraphQL szerverrel indul 3030 és a GraphQL szerkesztő.

A beépített csomagokkal azonnal lekérdezheti a GraphQL API-kat

A GraphQL HTTP-alapú, és a beépített GraphQL API-kat is használhatja http csomag és egyéb, a RESTful API-khoz hasonló csomagok. Vannak olyan csomagok is a Go ökoszisztémájában, amelyek lehetővé teszik a GraphQL API-k gyors fogyasztását.