Tokie skaitytojai kaip jūs padeda palaikyti MUO. Kai perkate naudodami nuorodas mūsų svetainėje, galime uždirbti filialų komisinius.
GraphQL yra HTTP pagrindu sukurta specifikacija, kuri išsprendžia daugumą problemų, su kuriomis susidursite kurdami RESTful API. Tai tinka kuriant sudėtingas API, nes galite naudoti vieną galinį tašką norėdami pasiekti duomenis iš daugelio schemų.
„GraphQL“ sumažina tokias problemas kaip per didelis ir per mažas iškvietimas REST. Galite sukurti klientą, kuris reikalauja konkrečių laukų, neatlikdami papildomų API skambučių.
Yra keletas „Go“ paketų, kuriais galite pasinaudoti kurdami GraphQL pagrįstas programas – nuo serverių iki API.
1. „gqlgen“ paketas
gqlgen (GraphQL generatorius) yra daug funkcijų, tipo saugus paketas, skirtas GraphQL serveriams ir API generuoti ir kurti.
„gqlgen“ paketas pirmiausia naudoja schemą, pagal kurį naudojate „GraphQL SDL“, kad apibrėžtumėte savo schemą. Tada jis sugeneruoja pagrindinį kodą, kurį galite koreguoti norėdami nustatyti GraphQL serverį ir API.
gqlgen yra vienas iš išsamesnių GraphQL paketų Go ekosistema. Su paketu galite generuoti dokumentus ir pavyzdžius bei kurti užklausas, mutacijas ir prenumeratas.
gqlgen užtikrina tipų susiejimą, įdėjimą, sąsajas, sugeneruotas įvestis ir enums. Paketas taip pat suteikia funkcionalumą atviram sekimui, klaidų registravimo kabliukus, duomenų įkėlimą, lygiagretumą ir padidintą užklausų sudėtingumą.
Apibrėžę „GraphQL“ schemą (kaip darytumėte bet kurią schemos pirmąją biblioteką), naudosite komandų eilutės programą gqlgen, kad sugeneruotumėte pagrindinį kodą iš savo projekto schemos.
Sukurti įrankiai.go failą į savo darbo katalogą ir pridėkite šias kodo eilutes, kad įtrauktumėte gqlgen paketas:
// +kūrimo įrankiai
paketą įrankiai
importuoti _ "github.com/99designs/gqlgen"
The įrankiai.go faile nurodomi kūrimo įrankiai gqlgen paketą.
Paleiskite šias komandas savo darbo kataloge, kad įdiegtumėte gqlgen paketą ir jo priklausomybes:
eik įdiegti github.com/99designs/gqlgen@latest
eik mod tvarkinga
Galite inicijuoti naują GraphQL projektą, kai paleisite GraphQL paketą su init komanda kaip argumentas:
eik paleiskite github.com/99designs/gqlgen init
Savo schemą turėsite turėti a schema.graphql failą, esantį jūsų darbo kataloge, kad inicijuotų projektą.
Paleiskite server.go failą, kad paleistumėte GraphQL serverį po to, kai pridėsite funkcijų prie savo GraphQL programos:
eik paleisti serverį.eik
2. graphql-go paketas
graphql-go paketas yra populiari GraphQL biblioteka, kuria siekiama pateikti visą GraphQL specifikacijos juodraštis GraphQL paslaugų kūrimui Go.
„graphql-go“ pakete taikomas vykdymo laiko tipų metodas; turite galimybę deklaruoti savo schemą Go kode, o paketas tikrina vykdymo laiką.
Galite įdiegti užklausas, mutacijas ir prenumeratas bei generuoti pavyzdžius naudodami paketą, bet nėra sugeneruotų sąrašų, įvesties ar atviro sekimo funkcijų.
„graphql-go“ turi minimalią API, palaikanti tiek integruotus, tiek populiarius trečiųjų šalių paketus. Ji turi paramą OpenTelemetry ir OpenTracing standartai, schemos tipo tikrinimas, lyginant su skyrikliais, lygiagretusis sprendiklių vykdymas ir daugelis kitų funkcijų.
Jei esate susipažinę su pastato RESTful paslaugas Go with the http paketas, graphql-go paketą bus lengva naudoti.
Paleiskite šias komandas savo darbo kataloge, kad pridėtumėte graphql-go paketą ir jo priklausomybes prie projekto:
eik gauti github.com/graph-gophers/graphql-eik
Štai paprasto GraphQL serverio paleidimo pavyzdys:
paketą pagrindinis
importuoti (
"rąstas"
"net/http"graphql "github.com/graph-gophers/graphql-eik"
"github.com/graph-gophers/graphql-eik/relay"
)tipo užklausą struktūra{}
func(_ *užklausa)Sveiki()styga { grąžinti "Labas pasauli!" }
funcpagrindinis() {
schemaPavyzdys := `
tipo Užklausa {
labas: Styga!
}
`
schema := graphql. MustParseSchema (schemaExample, &query{})
http. Handle("/query", &relay. tvarkytojas{schema: schema})
žurnalas. Mirtinas (http. ListenAndServe (":8080", nulis))
}
The Sveiki metodas užklausą struct yra GraphQL galutinio taško sprendiklis, kuris grąžina hello world. The schemaPavyzdys kintamasis yra schemos apibrėžimas, o serveris veiks 8080 prievade su http paketai KlausykIr Tarnaukite metodas.
3. Perkūno paketas
The Perkūnas struktūroje taikomas pirmasis požiūris; deklaruojate struktūrą, kuri modeliuoja jūsų GraphQL schemą. Jis generuoja GraphQL schema iš eiti duomenų, kad galėtumėte tvarkyti užklausų paketų sudarymą, tiesiogines užklausas, mutacijas, prenumeratas ir pavyzdžių generavimą.
„Thunder“ užtikrina tipo apsaugą su tipo surišimais ir kitomis funkcijomis, įskaitant atspindžiu pagrįstą schemų kūrimą, integruotas lygiagretus vykdymas ir paketų sudarymas, integruotas GraphiQL redaktorius ir suskaidytos schemos didesniam GraphQL serveriai.
Thunder pakete nėra įterpimo, sąsajų, sugeneruotų sąrašų ar įvesties, susiejimo, atviro sekimo ar tinkintų klaidų funkcijų. Tačiau, palyginti su kitais populiariais paketais, jis yra vienas lengviausiai naudojamų ir yra puikus pradinis paketas, jei neturite GraphQL patirties.
Norėdami įdiegti „Thunder“ paketą ir jo priklausomybes, turėsite paleisti šią komandą savo darbo katalogo terminale:
eik Gaukite github.com/samsarahq/thunder/graphql
Norėdami pradėti paprastą GraphQL serverį su Thunder paketu, turėsite deklaruoti schemos struktūros modelį, parašyti sprendinius ir sukurti serverio egzempliorius.
importuoti (
"kontekstas"
"net/http"
"laikas""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“
)tipo paštu struktūra {
Pavadinimas styga
kūnas styga
Sukurta laiku. Laikas
}// serveris yra mūsų graphql serveris.
tipo serveris struktūra {
įrašai []įrašas
}// registerQuery registruoja šakninės užklausos tipą.
func(s *serveris)registrUžklausa(schema *schemabuilder. Schema) {
obj := schema. Užklausa ()obj. FieldFunc ("įrašai", func() []paštu {
grąžinti s.post
})
}// registerMutation registruoja šakninės mutacijos tipą.
func(s *serveris)registrasMutacija(schema *schemabuilder. Schema) {
obj := schema. Mutacija ()obj. FieldFunc ("aidas", func(args struktūra{ Pranešimas styga })styga {
grąžinti args. Pranešimas
})
}// registerPost registruoja pranešimo tipą.
func(s *serveris)registruotisPast(schema *schemabuilder. Schema) {
obj := schema. Objektas („Įrašas“, įrašas{})obj. FieldFunc("amžius", func(ctx kontekstas. Kontekstas, p *post)styga {
reaktyvus. InvalidateAfter (ctx, 5*laikas. Antra)
grąžinti laikas. Nuo tada (p. CreatedAt).String()
})
}// schema sukuria graphql schemą.
func(s *serveris)schema() *graphql.Schema {
kūrėjas := schemų kūrėjas. NaujaSchema()
s.registerQuery (builder)
s.registerMutation (builder)
s.registerPost (statytojas)
grąžinti statybininkas. MustBuild ()
}funcpagrindinis() {
// Sukurti serverį, sukurti serverį ir pateikti schemą 3030 prievade.
serveris := &serveris{
įrašai: []post{
{Pavadinimas: "pirmas įrašas!", Turinys: "Aš čia buvau pirmas!", Sukurta: laikas. Dabar()},
{Title: "graphql", Body: "ar girdėjote apie Thunder?", CreatedAt: laikas. Dabar()},
},
}schema := serveris.schema()
savistaba. AddIntrospectionToSchema (schema)
// Atskleiskite schemą ir grafinę schemą.
http. Handle("/graphql", graphql. Valdiklis (schema))
http. Handle("/graphiql/", http. StripPrefix("/graphiql/", graphiql. Valdytojas ()))
http. ListenAndServe (":3030", nulis)
}
The paštu struct yra GraphQL schemos modelis ir serveris struct yra serverio egzempliorius. The registrUžklausa, registrasMutacija, ir registruotisPast metodai yra užklausų, mutacijų ir duomenų saugojimo skyriklio funkcijos.
The pagrindinis funkcija paleidžiama GraphQL serverio prievade 3030 ir GraphQL redaktorius.
Naudodami integruotus paketus galite pateikti užklausą dėl GraphQL API
„GraphQL“ yra pagrįsta HTTP, todėl galite naudoti „GraphQL“ API su integruotu http paketą ir kitus paketus, panašius į RESTful API. „Go“ ekosistemoje taip pat yra paketų, kurie leis greitai naudoti „GraphQL“ API.