Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju.

GraphQL je specifikacija temeljena na HTTP-u koja rješava većinu problema s kojima ćete se susresti dok gradite RESTful Apis. Prikladan je za izradu složenih API-ja jer možete koristiti jednu krajnju točku za pristup podacima iz mnogih shema.

GraphQL ublažava probleme poput pretjeranog i premalog dohvaćanja u REST-u. Možete izgraditi klijenta koji zahtijeva određena polja bez potrebe za dodatnim API pozivima.

Postoji nekoliko Go paketa koje možete iskoristiti za izradu aplikacija temeljenih na GraphQL-u, od poslužitelja do API-ja.

1. Paket gqlgen

gqlgen (GraphQL Generator) je značajkama bogat paket siguran za tipove za generiranje i izgradnju GraphQL poslužitelja i API-ja.

Paket gqlgen ima pristup na prvom mjestu prema shemi, kojim koristite GraphQL SDL za definiranje svoje sheme. Zatim generira predložak koda koji možete prilagoditi za postavljanje GraphQL poslužitelja i API-ja.

instagram viewer

gqlgen je jedan od potpunijih GraphQL paketa u ekosustava Go. Možete generirati dokumentaciju i primjere s paketom i kreirati upite, mutacije i pretplate.

gqlgen osigurava vezanje tipa, ugrađivanje, sučelja, generirane ulaze i enume. Paket također nudi funkcionalnost za otvoreno praćenje, kuke za bilježenje pogrešaka, učitavanje podataka, konkurentnost i povećanu složenost upita.

Nakon što definirate svoju GraphQL shemu — kao što biste to učinili s bilo kojom bibliotekom koja je prva shema — koristit ćete gqlgen aplikaciju naredbenog retka za generiranje osnovnog koda iz sheme u vašem projektu.

Stvoriti alati.krenuti datoteku u vašem radnom direktoriju i dodajte ove retke koda da uključite gqlgen paket:

// +alati za izgradnju

paket alata

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

The alati.krenuti datoteka specificira alate za izgradnju za gqlgen paket.

Pokrenite ove naredbe u svom radnom direktoriju da instalirate paket gqlgen i njegove ovisnosti:

ići instaliraj github.com/99dizajni/gqlgen@najnovije
ići mod uredan

Možete pokrenuti novi GraphQL projekt kada pokrenete GraphQL paket s u tome naredba kao argument:

ići pokreni github.com/99dizajni/gqlgen init

Morat ćete imati svoju shemu u a shema.graphql datoteku koja se nalazi u vašem radnom direktoriju za pokretanje projekta.

Pokreni server.go datoteku za pokretanje vašeg GraphQL poslužitelja nakon dodavanja funkcionalnosti vašoj GraphQL aplikaciji:

ići pokrenuti poslužitelj.ići

2. Paket graphql-go

Paket graphql-go je popularna GraphQL biblioteka koja ima za cilj pružiti potpunu GraphQL nacrt specifikacije za izgradnju GraphQL usluga u Go.

Paket graphql-go koristi pristup vrstama vremena izvođenja; imate opciju deklarirati svoju shemu u Go kodu, a paket provjerava vrijeme izvođenja.

Možete implementirati upite, mutacije i pretplate te generirati primjere s paketom, ali nema funkcionalnosti za generirane enume, unose ili otvoreno praćenje.

graphql-go ima minimalan API s podrškom za ugrađene pakete i popularne pakete trećih strana. Ima podršku za OpenTelemetry i OpenTracing standardi, provjera tipa sheme prema rezolverima, paralelno izvođenje rezolvera i mnoge druge značajke.

Ako ste upoznati s izgradnju RESTful usluga u Go with the http paket, naći ćete da je paket graphql-go jednostavan za korištenje.

Pokrenite ove naredbe u svom radnom direktoriju da dodate paket graphql-go i njegove ovisnosti u svoj projekt:

ići dobiti github.com/graph-gophers/graphql-ići

Evo primjera pokretanja jednostavnog GraphQL poslužitelja:

paket glavni

uvoz (
"log"
"net/http"

graphql "github.com/graph-gophers/graphql-ići"
"github.com/graph-gophers/graphql-ići/relay"
)

tip upit strukturirati{}

funk(_ *upit)zdravo()niz { povratak "Pozdrav svijete!" }

funkglavni() {
shemaPrimjer := `
tip Upit {
pozdrav: String!
}
`

shema := graphql. MustParseSchema (schemaExample, &query{})
http. Handle("/query", &relay. Rukovatelj {shema: shema})
log. Kobno (http. ListenAndServe(":8080", nula))
}

The zdravo metoda upit struct je razrješivač za GraphQL krajnju točku koja vraća hello world. The schemaExample varijabla je definicija sheme, a poslužitelj će raditi na portu 8080 s http paketa Slušajte i služite metoda.

3. Paket Thunder

The Grmljavina Framework ima strukturni prvi pristup; deklarirate strukturu koja modelira vašu GraphQL shemu. To stvara GraphQL shema iz Go podataka za rukovanje grupiranjem upita, upitima uživo, mutacijama, pretplatama i generiranjem primjera.

Thunder pruža sigurnost tipa s vezanjem tipa i drugim značajkama, uključujući izgradnju sheme temeljene na refleksiji, ugrađeno paralelno izvođenje i grupiranje, ugrađeni GraphiQL uređivač i podijeljene sheme za veći GraphQL poslužitelji.

U paketu Thunder nema funkcionalnosti za ugrađivanje, sučelja, generirane enume ili unose, federaciju, otvoreno praćenje ili prilagođene pogreške. Međutim, jedan je od najjednostavnijih za korištenje u usporedbi s drugim popularnim paketima i odličan je početni paket ako nemate iskustva s GraphQL-om.

Morat ćete pokrenuti ovu naredbu na terminalu vašeg radnog direktorija da biste instalirali paket Thunder i njegove ovisnosti:

ići dobiti github.com/samsarahq/thunder/graphql

Morat ćete deklarirati struct model za shemu, napisati rezolvere i instancirati poslužitelj za pokretanje jednostavnog GraphQL poslužitelja s paketom Thunder.

uvoz (
"kontekst"
"net/http"
"vrijeme"

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

tip objaviti strukturirati {
Titula niz
Tijelo niz
Stvoreno u vrijeme. Vrijeme
}

// poslužitelj je naš graphql poslužitelj.
tip poslužitelj strukturirati {
postovi []post
}

// registerQuery registrira korijensku vrstu upita.
funk(s *poslužitelj)registerQuery(shema *shemabuilder. Shema) {
obj := shema. Upit()

obj. FieldFunc("postovi", funk() []objaviti {
povratak s.postovi
})
}

// registerMutation registrira tip korijenske mutacije.
funk(s *poslužitelj)registarMutacija(shema *shemabuilder. Shema) {
obj := shema. Mutacija()

obj. FieldFunc("echo", funk(args strukturirati{ Poruka niz })niz {
povratak args. Poruka
})
}

// registerPost registrira vrstu posta.
funk(s *poslužitelj)registrirajPost(shema *shemabuilder. Shema) {
obj := shema. Objekt("Post", post{})

obj. FieldFunc("dob", funk(ctx kontekst. Kontekst, p *post)niz {
reaktivan. InvalidateAfter (ctx, 5*vrijeme. Drugi)
povratak vrijeme. Budući da (str. CreatedAt).String()
})
}

// shema gradi graphql shemu.
funk(s *poslužitelj)shema() *graphql.Shema {
graditelj := graditelj sheme. Novashema()
s.registerQuery (builder)
s.registerMutation (builder)
s.registerPost (builder)
povratak graditelj. MustBuild()
}

funkglavni() {
// Instancirajte poslužitelj, izgradite poslužitelj i poslužite shemu na portu 3030.
poslužitelj := &poslužitelj{
postovi: []post{
{Naslov: "prva objava!", Tijelo: "Prvi sam bio ovdje!", CreatedAt: vrijeme. Sada()},
{Title: "graphql", Body: "jesi li čuo za Thunder?", CreatedAt: vrijeme. Sada()},
},
}

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

// Izlaganje sheme i grafike.
http. Ručka ("/graphql", graphql. Rukovatelj (shema))
http. Ručka("/graphiql/", http. StripPrefix("/graphiql/", graphiql. Voditelj()))
http. ListenAndServe(":3030", nula)
}

The objaviti struct je model za GraphQL shemu, a poslužitelj struct je instanca poslužitelja. The registerQuery, registarMutacija, i registrirajPost metode su razrješivačke funkcije za upite, mutacije i pohranu podataka.

The glavni funkcija počinje s GraphQL poslužiteljem na priključku 3030 i uređivač GraphQL.

Možete postavljati upite GraphQL API-jima in Go s ugrađenim paketima

GraphQL se temelji na HTTP-u i možete koristiti GraphQL API-je s ugrađenim http paket i drugi paketi slični RESTful API-jima. Postoje i paketi u Goovom ekosustavu koji će vam omogućiti brzo korištenje GraphQL API-ja.