Tādi lasītāji kā jūs palīdz atbalstīt MUO. Veicot pirkumu, izmantojot saites mūsu vietnē, mēs varam nopelnīt filiāles komisiju.

GraphQL ir uz HTTP balstīta specifikācija, kas atrisina lielāko daļu problēmu, kas rodas, veidojot RESTful API. Tas ir piemērots sarežģītu API izveidei, jo varat izmantot vienu galapunktu, lai piekļūtu datiem no daudzām shēmām.

GraphQL mazina tādas problēmas kā pārmērīga un nepietiekama ielāde REST. Varat izveidot klientu, kas pieprasa konkrētus laukus, neveicot papildu API izsaukumus.

Ir vairākas Go pakotnes, kuras varat izmantot, lai izveidotu uz GraphQL balstītas lietojumprogrammas, sākot no serveriem līdz API.

1. gqlgen pakotne

gqlgen (GraphQL ģenerators) ir ar funkcijām bagāta, tipam droša pakotne GraphQL serveru un API ģenerēšanai un veidošanai.

Gqlgen pakotnē tiek izmantota shēmas pirmā pieeja, ar kuru jūs izmantojat GraphQL SDL, lai definētu savu shēmu. Pēc tam tas ģenerē standarta kodu, kuru varat pielāgot, lai iestatītu GraphQL serveri un API.

gqlgen ir viena no pilnīgākajām GraphQL pakotnēm

Go ekosistēma. Izmantojot pakotni, varat ģenerēt dokumentāciju un piemērus un izveidot vaicājumus, mutācijas un abonementus.

gqlgen nodrošina veidu saistīšanu, iegulšanu, saskarnes, ģenerētās ievades un enums. Pakotne nodrošina arī funkcionalitāti atvērtai izsekošanai, āķus kļūdu reģistrēšanai, datu ielādei, vienlaicīgumu un palielinātu vaicājumu sarežģītību.

Pēc GraphQL shēmas definēšanas — tāpat kā ar jebkuru shēmas pirmo bibliotēku — izmantosit komandrindas lietotni gqlgen, lai ģenerētu standarta kodu no shēmas savā projektā.

Izveidot a instrumenti.go failu savā darba direktorijā un pievienojiet šīs koda rindas, lai iekļautu gqlgen iepakojums:

// +veidošanas rīki

iepakojums instrumenti

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

The instrumenti.go fails norāda veidošanas rīkus gqlgen iepakojums.

Palaidiet šīs komandas savā darba direktorijā, lai instalētu gqlgen pakotni un tās atkarības:

aiziet instalēt github.com/99designs/gqlgen@latest
aiziet mod kārtīgs

Varat inicializēt jaunu GraphQL projektu, palaižot GraphQL pakotni ar tajā komanda kā arguments:

aiziet palaist github.com/99designs/gqlgen init

Jūsu shēmai būs jābūt a schema.graphql failu, kas atrodas jūsu darba direktorijā, lai inicializētu projektu.

Palaidiet server.go failu, lai palaistu GraphQL serveri pēc funkcionalitātes pievienošanas savai GraphQL lietotnei:

aiziet palaist serveri.aiziet

2. graphql-go pakotne

graphql-go pakotne ir populāra GraphQL bibliotēka, kuras mērķis ir nodrošināt pilnīgu GraphQL specifikācijas projekts GraphQL pakalpojumu izveidei Go.

graphql-go pakotne izmanto izpildlaika tipu pieeju; jums ir iespēja deklarēt savu shēmu Go kodā, un pakotne pārbauda izpildlaiku.

Izmantojot pakotni, varat ieviest vaicājumus, mutācijas un abonementus un ģenerēt piemērus, taču nav ģenerēto uzskaitījumu, ievades vai atvērtās izsekošanas funkcionalitātes.

graphql-go piedāvā minimālu API ar atbalstu gan iebūvētajām, gan populārajām trešo pušu pakotnēm. Tam ir atbalsts OpenTelemetry un OpenTracing standarti, shēmas tipa pārbaude, salīdzinot ar atrisinātājiem, paralēla atrisinātāju izpilde un daudzas citas funkcijas.

Ja esat iepazinies ar ēka RESTful pakalpojumus Go with the http iepakojums, graphql-go pakotni būs viegli lietot.

Palaidiet šīs komandas savā darba direktorijā, lai savam projektam pievienotu graphql-go pakotni un tās atkarības:

aiziet iegūt github.com/graph-gophers/graphql-aiziet

Šeit ir vienkārša GraphQL servera palaišanas piemērs:

iepakojums galvenais

imports (
"baļķis"
"net/http"

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

veids vaicājums struktūra{}

func(_ *vaicājums)Sveiki()virkne { atgriezties "Sveika pasaule!" }

funcgalvenais() {
shēmaPiemērs := `
veids Vaicājums {
sveiki: Stīga!
}
`

shēma := graphql. MustParseSchema (schemaExample, &query{})
http. Handle("/query", &relejs. Apdarinātājs{Schema: shema})
žurnāls. Fatal (http. KlausītiesAndServe(":8080", nulle))
}

The Sveiki metode vaicājums struct ir GraphQL galapunkta atrisinātājs, kas atgriež hello world. The shēmaPiemērs mainīgais ir shēmas definīcija, un serveris darbosies portā 8080 ar http iepakojums Klausieties un kalpojiet metodi.

3. Pērkona pakete

The Pērkons ietvars izmanto struct first pieeju; jūs deklarējat struktūru, kas modelē jūsu GraphQL shēmu. Tas rada GraphQL shēma no Go datiem, lai apstrādātu vaicājumu komplektēšanu, reāllaika vaicājumus, mutācijas, abonementus un piemēru ģenerēšanu.

Thunder nodrošina tipu drošību, izmantojot tipu piesaistes un citas funkcijas, tostarp uz atspulgu balstītu shēmu veidošanu, iebūvēta paralēla izpilde un komplektēšana, iebūvēts GraphiQL redaktors un sadalītas shēmas lielākam GraphQL serveriem.

Thunder pakotnē nav iegulšanas, saskarņu, ģenerētu enumu vai ievades, federācijas, atvērtās izsekošanas vai pielāgoto kļūdu funkcionalitātes. Tomēr tas ir viens no vienkāršākajiem lietojumiem salīdzinājumā ar citām populārām pakotnēm, un tas ir lielisks sākuma pakotnes, ja jums nav GraphQL pieredzes.

Lai instalētu Thunder pakotni un tās atkarības, šī komanda būs jāpalaiž darba direktorija terminālī:

aiziet iegūstiet vietni github.com/samsarahq/thunder/graphql

Lai palaistu vienkāršu GraphQL serveri ar Thunder pakotni, jums būs jādeklarē shēmas struktūras modelis, jāraksta atrisinātāji un jāizveido serveris.

imports (
"konteksts"
"net/http"
"laiks"

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

veids pastu struktūra {
Nosaukums virkne
Ķermenis virkne
Izveidots laikā. Laiks
}

// serveris ir mūsu graphql serveris.
veids serveris struktūra {
ziņas []ziņa
}

// registerQuery reģistrē saknes vaicājuma veidu.
func(s *serveris)registerQuery(shēma *schemabuilder. shēma) {
obj := shēma. Vaicājums()

obj. FieldFunc ("ziņas", func() []pastu {
atgriezties s.posts
})
}

// registerMutation reģistrē saknes mutācijas veidu.
func(s *serveris)reģistrsMutācija(shēma *schemabuilder. shēma) {
obj := shēma. Mutācija ()

obj. FieldFunc ("atbalss", func(args struktūra{ Ziņojums virkne })virkne {
atgriezties args. Ziņojums
})
}

// registerPost reģistrē ziņas veidu.
func(s *serveris)reģistrētiesPasts(shēma *schemabuilder. shēma) {
obj := shēma. Objekts ("Ziņa", ziņa{})

obj. FieldFunc("vecums", func(ctx konteksts. Konteksts, p *ziņa)virkne {
reaģējošs. InvalidateAfter (ctx, 5*laiks. Otrkārt)
atgriezties laiks. Kopš (lpp. CreatedAt).String()
})
}

// shēma veido graphql shēmu.
func(s *serveris)shēma() *graphql.Shēma {
celtnieks := shēmu veidotājs. Jauna shēma()
s.registerQuery (veidotājs)
s.registerMutation (veidotājs)
s.registerPost (veidnieks)
atgriezties celtnieks. MustBuild ()
}

funcgalvenais() {
// Izveidojiet serveri, izveidojiet serveri un apkalpojiet shēmu portā 3030.
serveris := &serveris{
ziņas: []post{
{Title: "pirmā ziņa!", Pamatteksts: "Es biju šeit pirmais!", CreatedAt: laiks. Tagad()},
{Title: "graphql", Body: "vai jūs dzirdējāt par Thunder?", CreatedAt: laiks. Tagad()},
},
}

shēma := server.schema()
pašpārbaude. AddIntrospectionToSchema (shēma)

// Atklāt shēmu un graphiql.
http. Handle("/graphql", graphql. Apdarinātājs (shēma))
http. Handle("/graphiql/", http. StripPrefix("/graphiql/", graphiql. Apdarinātājs ()))
http. KlausītiesAndServe(":3030", nulle)
}

The pastu struct ir GraphQL shēmas modelis un serveris struct ir servera gadījums. The registerQuery, reģistrsMutācija, un reģistrētiesPasts metodes ir atrisinātāja funkcijas vaicājumiem, mutācijām un datu glabāšanai.

The galvenais funkcija sākas ar GraphQL serveri portā 3030 un GraphQL redaktoru.

Izmantojot iebūvētās pakotnes, varat meklēt GraphQL API

GraphQL pamatā ir HTTP, un jūs varat izmantot GraphQL API, izmantojot iebūvēto http pakotni un citas pakotnes, kas līdzīgas RESTful API. Go ekosistēmā ir arī pakotnes, kas ļaus ātri patērēt GraphQL API.