Kaltaisesi lukijat auttavat tukemaan MUO: ta. Kun teet ostoksen käyttämällä sivustollamme olevia linkkejä, voimme ansaita kumppanipalkkion.

GraphQL on HTTP-pohjainen määritys, joka ratkaisee suurimman osan ongelmista, joita kohtaat RESTfulin rakentamisen aikana API: t. Se sopii monimutkaisten sovellusliittymien rakentamiseen, koska voit käyttää yhtä päätepistettä useiden skeemojen tietojen käyttämiseen.

GraphQL lieventää ongelmia, kuten yli- ja alihakua RESTissä. Voit rakentaa asiakkaan, joka pyytää tiettyjä kenttiä ilman ylimääräisiä API-kutsuja.

On olemassa useita Go-paketteja, joita voit hyödyntää rakentaaksesi GraphQL-pohjaisia ​​sovelluksia palvelimista API: ihin.

1. gqlgen-paketti

gqlgen (GraphQL-generaattori) on monipuolinen, tyyppiturvallinen paketti GraphQL-palvelimien ja API: iden luomiseen ja rakentamiseen.

Gqlgen-paketti käyttää skeema-ensintätapaa, jonka avulla määrität skeemasi GraphQL SDL: n avulla. Sitten se luo pohjakoodin, jota voit säätää GraphQL-palvelimen ja API: n määrittämiseksi.

gqlgen on yksi täydellisimmistä GraphQL-paketeista Go-ekosysteemi. Voit luoda dokumentaatiota ja esimerkkejä paketilla sekä luoda kyselyitä, mutaatioita ja tilauksia.

gqlgen varmistaa tyyppisidokset, upotukset, rajapinnat, luodut syötteet ja enumit. Paketti tarjoaa myös toimintoja avoimeen jäljitykseen, koukut virheiden kirjaamiseen, tietojen lataamiseen, samanaikaisuuteen ja lisää kyselyn monimutkaisuutta.

Kun olet määritellyt GraphQL-skeeman – kuten minkä tahansa skeema-first-kirjaston kanssa – käytät gqlgen-komentorivisovellusta luomaan mallikoodin projektisi skeemasta.

Luo tools.go tiedosto työhakemistoosi ja lisää nämä koodirivit sisällyttääksesi gqlgen paketti:

// +rakennustyökalut

paketti työkaluja

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

The tools.go tiedosto määrittää rakennustyökalut gqlgen paketti.

Suorita nämä komennot työhakemistossasi asentaaksesi gqlgen-paketin ja sen riippuvuudet:

mennä asenna github.com/99designs/gqlgen@latest
mennä mod siisti

Voit alustaa uuden GraphQL-projektin, kun suoritat GraphQL-paketin kanssa sen sisällä komento argumenttina:

mennä suorita github.com/99designs/gqlgen init

Sinulla on oltava skeemasi a schema.graphql työhakemistossasi oleva tiedosto projektin alustamiseksi.

Suorita server.go tiedosto GraphQL-palvelimen käynnistämiseksi sen jälkeen, kun olet lisännyt toimintoja GraphQL-sovellukseesi:

mennä ajaa palvelinta.mennä

2. graphql-go-paketti

graphql-go-paketti on suosittu GraphQL-kirjasto, jonka tavoitteena on tarjota täydellinen GraphQL luonnos spesifikaatio GraphQL-palvelujen rakentamiseen Gossa.

graphql-go-paketti käyttää ajonaikatyyppien lähestymistapaa; sinulla on mahdollisuus ilmoittaa skeemasi Go-koodissa ja paketti tarkistaa suoritusajan.

Voit toteuttaa kyselyjä, mutaatioita ja tilauksia sekä luoda esimerkkejä paketin avulla, mutta luotuja enumeita, syötteitä tai avointa jäljitystä varten ei ole toimintoja.

graphql-gossa on minimaalinen API, joka tukee sekä sisäisiä että suosittuja kolmannen osapuolen paketteja. Sillä on tukea OpenTelemetry ja OpenTracing standardeja, skeeman tyyppitarkistusta ratkaisijoilla, ratkaisijoiden rinnakkaista suoritusta ja monia muita ominaisuuksia.

Jos olet perehtynyt RESTful-palveluiden rakentaminen Go with the http paketti, graphql-go-paketti on helppokäyttöinen.

Suorita nämä komennot työhakemistossasi lisätäksesi graphql-go-paketin ja sen riippuvuudet projektiisi:

mennä hanki github.com/graph-gophers/graphql-mennä

Tässä on esimerkki yksinkertaisen GraphQL-palvelimen käynnistämisestä:

paketti pää

tuonti (
"Hirsi"
"net/http"

graphql "github.com/graph-gophers/graphql-mennä"
"github.com/graph-gophers/graphql-mennä/relay"
)

tyyppi kysely struct{}

func(_ *kysely)Hei()merkkijono { palata "Hei maailma!" }

funcpää() {
skeemaEsimerkki := `
tyyppi Kysely {
hei: String!
}
`

skeema := graphql. MustParseSchema (schemaExample, &query{})
http. Handle("/query", &relay. Käsittelijä{Schema: schema})
Hirsi. Kohtalokas (http. ListenAndServe(":8080", nolla))
}

The Hei menetelmä kysely struct on GraphQL-päätepisteen ratkaisija, joka palauttaa hello world. The skeemaEsimerkki muuttuja on skeeman määritelmä, ja palvelin toimii portissa 8080 http paketteja KuunteleJaPalvele menetelmä.

3. Thunder-paketti

The Ukkonen kehys käyttää struct first -lähestymistapaa; määrität rakenteen, joka mallintaa GraphQL-skeemasi. Se tuottaa GraphQL-skeema Go-tiedoista käsitelläksesi kyselyjen eräajoa, live-kyselyitä, mutaatioita, tilauksia ja esimerkkiluonnosta.

Thunder tarjoaa tyyppiturvaa tyyppisidoksilla ja muilla ominaisuuksilla, mukaan lukien heijastuspohjainen skeeman rakentaminen, sisäänrakennettu rinnakkaissuoritus ja eräajo, sisäänrakennettu GraphiQL-editori ja jaetut skeemat suuremmalle GraphQL: lle palvelimia.

Thunder-paketissa ei ole upottamista, käyttöliittymiä, luotuja enumeita tai syötteitä, liittämistä, avointa jäljitystä tai mukautettuja virheitä koskevia toimintoja. Se on kuitenkin yksi helpoimmin käytettävistä muihin suosittuihin paketteihin verrattuna ja on erinomainen aloituspaketti, jos sinulla ei ole GraphQL-kokemusta.

Sinun on suoritettava tämä komento työhakemistosi päätteessä asentaaksesi Thunder-paketin ja sen riippuvuudet:

mennä hanki github.com/samsarahq/thunder/graphql

Sinun on määritettävä skeeman rakennemalli, kirjoitettava ratkaisijat ja instantoitava palvelin käynnistääksesi yksinkertaisen GraphQL-palvelimen Thunder-paketilla.

tuonti (
"konteksti"
"net/http"
"aika"

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

tyyppi lähettää struct {
Otsikko merkkijono
Runko merkkijono
Luotu aikaan. Aika
}

// palvelin on graphql-palvelimemme.
tyyppi palvelin struct {
viestit []viesti
}

// registerQuery rekisteröi juurikyselytyypin.
func(s *palvelin)registerQuery(skeema *schemabuilder. Kaavio) {
obj := skeema. Kysely()

obj. FieldFunc("viestit", func() []lähettää {
palata s.posts
})
}

// registerMutation rekisteröi juurimutaatiotyypin.
func(s *palvelin)registerMutation(skeema *schemabuilder. Kaavio) {
obj := skeema. Mutaatio()

obj. FieldFunc("echo", func(args struct{ Viesti merkkijono })merkkijono {
palata args. Viesti
})
}

// registerPost rekisteröi viestityypin.
func(s *palvelin)rekisteröidäPosti(skeema *schemabuilder. Kaavio) {
obj := skeema. Objekti("Post", post{})

obj. FieldFunc("ikä", func(ctx konteksti. Konteksti, p *viesti)merkkijono {
reaktiivinen. InvalidateAfter (ctx, 5*aika. Toinen)
palata aika. Siitä lähtien (s. CreatedAt).String()
})
}

// skeema rakentaa graphql-skeeman.
func(s *palvelin)kaava() *graphql.Kaavio {
rakentaja := schemabuilder. NewSchema()
s.registerQuery (rakennustyökalu)
s.registerMutation (rakennustyökalu)
s.registerPost (rakentaja)
palata rakentaja. MustBuild()
}

funcpää() {
// Luo palvelin, rakenna palvelin ja palvele skeemaa portissa 3030.
palvelin := &palvelin{
viestit: []posta{
{Title: "ensimmäinen viesti!", Body: "Olin täällä ensin!", CreatedAt: aika. Nyt()},
{Title: "graphql", Body: "kuulitko Thunderista?", CreatedAt: aika. Nyt()},
},
}

schema := server.schema()
itsetutkiskelu. AddIntrospectionToSchema (skeema)

// Avaa skeema ja graphiql.
http. Handle("/graphql", graphql. Käsittelijä (kaavio))
http. Handle("/graphiql/", http. StripPrefix("/graphiql/", graphiql. Käsittelijä()))
http. ListenAndServe(":3030", nolla)
}

The lähettää struct on malli GraphQL-skeemalle, ja palvelin struct on palvelininstanssi. The registerQuery, registerMutation, ja rekisteröidäPosti menetelmät ovat kyselyiden, mutaatioiden ja tietojen tallentamisen funktioita.

The pää toiminto alkaa GraphQL-palvelimella portissa 3030 ja GraphQL-editori.

Voit tehdä kyselyitä GraphQL-sovellusliittymistä sisäänrakennetuilla paketeilla

GraphQL on HTTP-pohjainen, ja voit käyttää GraphQL-sovellusliittymiä sisäänrakennetulla http paketti ja muut RESTful API: n kaltaiset paketit. Go: n ekosysteemissä on myös paketteja, joiden avulla voit kuluttaa GraphQL-sovellusliittymiä nopeasti.