Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo.

GraphQL je specifikacija, ki temelji na HTTP in rešuje večino težav, na katere boste naleteli med gradnjo RESTful API-ji. Primeren je za izdelavo kompleksnih API-jev, saj lahko uporabite eno končno točko za dostop do podatkov iz številnih shem.

GraphQL blaži težave, kot sta prekomerno in premajhno pridobivanje v REST. Ustvarite lahko odjemalca, ki zahteva določena polja, ne da bi morali opraviti dodatne klice API-ja.

Obstaja več paketov Go, ki jih lahko izkoristite za izdelavo aplikacij, ki temeljijo na GraphQL, od strežnikov do API-jev.

1. Paket gqlgen

gqlgen (generator grafov QL) je paket, ki je bogat s funkcijami in je varen za tipe, za ustvarjanje in gradnjo GraphQL strežnikov in API-jev.

Paket gqlgen uporablja pristop najprej sheme, s katerim uporabite GraphQL SDL za definiranje vaše sheme. Nato ustvari okvirno kodo, ki jo lahko prilagodite za nastavitev strežnika GraphQL in API-ja.

instagram viewer

gqlgen je eden popolnejših paketov GraphQL v ekosistem Go. S paketom lahko ustvarite dokumentacijo in primere ter ustvarite poizvedbe, mutacije in naročnine.

gqlgen zagotavlja vezave tipov, vdelave, vmesnike, generirane vnose in enume. Paket ponuja tudi funkcionalnost za odprto sledenje, kljuke za beleženje napak, nalaganje podatkov, sočasnost in povečano kompleksnost poizvedb.

Ko definirate svojo shemo GraphQL – kot bi to storili s katero koli knjižnico s prvo shemo – boste uporabili aplikacijo ukazne vrstice gqlgen za generiranje predloge kode iz sheme v vašem projektu.

Ustvariti tools.go datoteko v vašem delovnem imeniku in dodajte te vrstice kode, da vključite gqlgen paket:

// +orodja za gradnjo

paket orodja

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

The tools.go datoteka določa orodja za gradnjo za gqlgen paket.

Zaženite te ukaze v svojem delovnem imeniku, da namestite paket gqlgen in njegove odvisnosti:

pojdi namestite github.com/99designs/gqlgen@najnovejše
pojdi mod urejeno

Nov projekt GraphQL lahko inicializirate, ko zaženete paket GraphQL z v ukaz kot argument:

pojdi zaženi github.com/99designs/gqlgen init

Svojo shemo boste morali imeti v a schema.graphql datoteko v vašem delovnem imeniku za inicializacijo projekta.

Zaženite server.go datoteko za zagon strežnika GraphQL po dodajanju funkcionalnosti vaši aplikaciji GraphQL:

pojdi zagon strežnika.pojdi

2. Paket graphql-go

Paket graphql-go je priljubljena knjižnica GraphQL, katere cilj je zagotoviti popolno Osnutek specifikacije GraphQL za gradnjo storitev GraphQL v Go.

Paket graphql-go uporablja pristop tipov izvajalnega okolja; imate možnost, da deklarirate svojo shemo v kodi Go, paket pa preveri med izvajanjem.

Izvajate lahko poizvedbe, mutacije in naročnine ter ustvarjate primere s paketom, vendar ni nobene funkcionalnosti za ustvarjene enume, vnose ali odprto sledenje.

graphql-go ima minimalen API s podporo za vgrajene pakete in priljubljene pakete tretjih oseb. Ima podporo za OpenTelemetry in OpenTracing standardi, preverjanje vrste sheme glede na razreševalce, vzporedno izvajanje razreševalcev in številne druge funkcije.

Če poznate gradnjo storitev RESTful v Go with the http paket, ugotovili boste, da je paket graphql-go enostaven za uporabo.

Zaženite te ukaze v svojem delovnem imeniku, da svojemu projektu dodate paket graphql-go in njegove odvisnosti:

pojdi pridobi github.com/graph-gophers/graphql-pojdi

Tu je primer zagona preprostega strežnika GraphQL:

paket glavni

uvoz (
"dnevnik"
"net/http"

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

vrsta poizvedbo struct{}

funk(_ *poizvedba)zdravo()vrvica { vrnitev "Pozdravljen, svet!" }

funkglavni() {
schemaExample := `
vrsta Poizvedba {
zdravo: String!
}
`

shema := graphql. MustParseSchema (schemaExample, &query{})
http. Handle("/query", &relay. Obravnava{Shema: shema})
dnevnik. Usodno (http. ListenAndServe(":8080", nič))
}

The zdravo metoda poizvedbo struct je razreševalec za končno točko GraphQL, ki vrne hello world. The schemaExample spremenljivka je definicija sheme, strežnik pa bo deloval na vratih 8080 z http paketi ListenAndServe metoda.

3. Paket Thunder

The grmenje ogrodje uporablja pristop najprej struktura; deklarirate strukturo, ki modelira vašo shemo GraphQL. Ustvarja Shema GraphQL iz podatkov Go za obdelavo paketov poizvedb, poizvedb v živo, mutacij, naročnin in generiranja primerov.

Thunder zagotavlja varnost tipov z vezavami tipov in drugimi funkcijami, vključno z gradnjo sheme na podlagi refleksije, vgrajeno vzporedno izvajanje in pakiranje, vgrajen urejevalnik GraphiQL in razdeljene sheme za večji GraphQL strežniki.

V paketu Thunder ni funkcionalnosti za vdelavo, vmesnike, ustvarjene enume ali vnose, zvezo, odprto sledenje ali napake po meri. Vendar pa je eden najpreprostejših za uporabo v primerjavi z drugimi priljubljenimi paketi in je odličen začetni paket, če nimate izkušenj z GraphQL.

Za namestitev paketa Thunder in njegovih odvisnosti boste morali zagnati ta ukaz v terminalu vašega delovnega imenika:

pojdi pridobite github.com/samsarahq/thunder/graphql

Morali boste deklarirati strukturni model za shemo, napisati razreševalce in instancirati strežnik, da zaženete preprost strežnik GraphQL s paketom Thunder.

uvoz (
"kontekst"
"net/http"
"čas"

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

vrsta post struct {
Naslov vrvica
Telo vrvica
Ustvarjeno ob času. Čas
}

// strežnik je naš strežnik graphql.
vrsta strežnik struct {
objave []objava
}

// registerQuery registrira vrsto korenske poizvedbe.
funk(s *strežnik)registerQuery(shema *schemabuilder. shema) {
obj := shema. poizvedba()

obj. FieldFunc("objave", funk() []post {
vrnitev s.posts
})
}

// registerMutation registrira tip korenske mutacije.
funk(s *strežnik)registerMutation(shema *schemabuilder. shema) {
obj := shema. Mutacija()

obj. FieldFunc("odmev", funk(args struct{ Sporočilo vrvica })vrvica {
vrnitev args. Sporočilo
})
}

// registerPost registrira vrsto objave.
funk(s *strežnik)registerPost(shema *schemabuilder. shema) {
obj := shema. Objekt("Objava", objava{})

obj. FieldFunc("starost", funk(kontekst ctx. Kontekst, p *post)vrvica {
reaktiven. InvalidateAfter (ctx, 5*čas. drugič)
vrnitev čas. Ker (str. CreatedAt).String()
})
}

// shema gradi shemo graphql.
funk(s *strežnik)shema() *graphql.Shema {
builder := schemabuilder. Novashema()
s.registerQuery (graditelj)
s.registerMutation (graditelj)
s.registerPost (graditelj)
vrnitev gradbenik. MustBuild()
}

funkglavni() {
// Ustvarite primerek strežnika, zgradite strežnik in postrezite shemo na vratih 3030.
strežnik := &strežnik{
objave: []objava{
{Naslov: "prva objava!", Telo: "Prvi sem bil tukaj!", Ustvarjeno ob: čas. Zdaj()},
{Title: "graphql", Body: "ali ste slišali za Thunder?", CreatedAt: čas. Zdaj()},
},
}

shema := server.schema()
introspekcija. AddIntrospectionToSchema (shema)

// Razkrij shemo in grafiko.
http. Handle("/graphql", graphql. Upravljavec (shema))
http. Handle("/graphiql/", http. StripPrefix("/graphiql/", graphiql. Voditelj()))
http. ListenAndServe(":3030", nič)
}

The post struct je model za shemo GraphQL in strežnik struct je primerek strežnika. The registerQuery, registerMutation, in registerPost metode so razreševalne funkcije za poizvedbe, mutacije in shranjevanje podatkov.

The glavni funkcija se zažene s strežnikom GraphQL na vratih 3030 in urejevalnik GraphQL.

API-je GraphQL lahko poizvedujete in Go z vgrajenimi paketi

GraphQL temelji na HTTP-ju in API-je GraphQL lahko uporabljate z vgrajenim http paket in drugi paketi, podobni API-jem RESTful. V ekosistemu Go so tudi paketi, ki vam bodo omogočili hitro uporabo API-jev GraphQL.