Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu.

GraphQL on HTTP-põhine spetsifikatsioon, mis lahendab enamiku probleemidest, millega RESTfuli loomisel kokku puutute API-d. See sobib keerukate API-de loomiseks, kuna saate paljude skeemide andmetele juurdepääsuks kasutada ühte lõpp-punkti.

GraphQL leevendab selliseid probleeme nagu REST-i üle- ja alalaadimine. Saate luua kliendi, mis taotleb konkreetseid välju ilma täiendavaid API-kõnesid tegemata.

GraphQL-põhiste rakenduste loomiseks saate kasutada mitut Go paketti serveritest API-deni.

1. gqlgeni pakett

gqlgen (GraphQL-i generaator) on funktsioonirikas, tüübikindel pakett GraphQL-i serverite ja API-de genereerimiseks ja ehitamiseks.

Pakett gqlgen kasutab skeemipõhist lähenemisviisi, mille abil saate oma skeemi määratlemiseks kasutada GraphQL SDL-i. Seejärel genereerib see standardkoodi, mida saate oma GraphQL-serveri ja API seadistamiseks kohandada.

gqlgen on üks täiuslikumaid GraphQL-i pakette

instagram viewer
Go ökosüsteem. Saate koostada paketiga dokumentatsiooni ja näiteid ning luua päringuid, mutatsioone ja tellimusi.

gqlgen tagab tüüpide sidumised, manustused, liidesed, genereeritud sisendid ja enumid. Pakett pakub ka funktsionaalsust avatud jälgimiseks, konksud vigade logimiseks, andmete laadimiseks, samaaegsuseks ja päringu keerukuse suurendamiseks.

Pärast GraphQL-i skeemi määratlemist – nagu teeksite iga skeemi esimese teegi puhul – kasutate käsurearakendust gqlgen, et genereerida oma projekti skeemist standardkood.

Loo tööriistad.go faili oma töökataloogi ja lisage need koodiread, et kaasata gqlgen pakett:

// +ehitustööriistad

pakett tööriistad

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

The tööriistad.go fail määrab ehitustööriistad gqlgen pakett.

Käivitage need käsud oma töökataloogis, et installida gqlgen pakett ja selle sõltuvused:

mine installige github.com/99designs/gqlgen@latest
mine mood korras

Saate lähtestada uue GraphQL-projekti, kui käivitate GraphQL-i paketi rakendusega selles käsk argumendina:

mine käivitage github.com/99designs/gqlgen init

Teil peab olema oma skeem a schema.graphql faili, mis asub teie töökataloogis projekti lähtestamiseks.

Käivitage server.go faili GraphQL-serveri käivitamiseks pärast GraphQL-i rakendusele funktsioonide lisamist:

mine käivitage server.mine

2. graphql-go pakett

graphql-go pakett on populaarne GraphQL teek, mille eesmärk on pakkuda täielikku GraphQL spetsifikatsiooni mustand GraphQL-i teenuste loomiseks Go-s.

graphql-go pakett kasutab käitusaja tüüpide lähenemisviisi; teil on võimalus deklareerida oma skeem Go koodis ja pakett kontrollib käitusaega.

Saate paketiga juurutada päringuid, mutatsioone ja tellimusi ning genereerida näiteid, kuid genereeritud loendite, sisendite ega avatud jälgimise jaoks pole funktsioone.

graphql-go sisaldab minimaalset API-d, mis toetab nii sisseehitatud pakette kui ka populaarseid kolmanda osapoole pakette. Sellel on toetus OpenTelemetry ja OpenTracing standardid, skeemitüübi kontrollimine lahendajate suhtes, lahendajate paralleelkäivitamine ja palju muid funktsioone.

Kui olete tuttav RESTful teenuste ehitamine Go with the http pakett, graphql-go paketti on lihtne kasutada.

Käivitage need käsud oma töökataloogis, et lisada oma projektile pakett graphql-go ja selle sõltuvused:

mine hankige github.com/graph-gophers/graphql-mine

Siin on näide lihtsa GraphQL-serveri käivitamisest:

pakett peamine

importida (
"logi"
"net/http"

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

tüüp päring struktuur{}

func(_ *päring)Tere()string { tagasi "Tere, Maailm!" }

funcpeamine() {
skeemNäide := `
tüüp Päring {
tere: String!
}
`

skeem := graphql. MustParseSchema (schemaExample, &query{})
http. Handle("/query", &relee. Käsitleja{Skeemi: skeem})
logi. Saatuslik (http. ListenAndServe(":8080", null))
}

The Tere meetod päring struct on GraphQL-i lõpp-punkti lahendaja, mis tagastab hello world. The skeemNäide muutuja on skeemi määratlus ja server töötab pordis 8080 koos http pakendid Kuula ja teeninda meetod.

3. Äikese pakett

The Äike raamistik kasutab struct first lähenemisviisi; deklareerite struktuuri, mis modelleerib teie GraphQL-i skeemi. See tekitab GraphQL skeem andmetest Go, et hallata päringute komplekteerimist, reaalajas päringuid, mutatsioone, tellimusi ja näidete genereerimist.

Thunder pakub tüübikaitset tüübisidemete ja muude funktsioonidega, sealhulgas peegelduspõhise skeemi koostamisega, sisseehitatud paralleelkäivitus ja komplekteerimine, sisseehitatud GraphiQL-i redaktor ja jagatud skeemid suurema GraphQL-i jaoks serverid.

Thunderi paketis pole manustamiseks, liideste, loodud loendite või sisendite, liitmise, avatud jälgimise ega kohandatud vigade funktsioone. Võrreldes teiste populaarsete pakettidega on see aga üks lihtsamini kasutatavaid ja suurepärane lähtepakett, kui teil pole GraphQL-i kogemusi.

Thunderi paketi ja selle sõltuvuste installimiseks peate käivitama selle käsu oma töökataloogi terminalis:

mine hankige github.com/samsarahq/thunder/graphql

Peate deklareerima skeemi struktuurimudeli, kirjutama lahendajad ja looma serveri, et käivitada Thunderi paketiga lihtne GraphQL-server.

importida (
"Sisu"
"net/http"
"aeg"

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

tüüp postitus struktuur {
Pealkiri string
Keha string
Loodud ajal. Aeg
}

// server on meie graphql-server.
tüüp server struktuur {
postitused []postitus
}

// registerQuery registreerib juurpäringu tüübi.
func(s *server)registerQuery(skeem *skeemiehitaja. skeem) {
obj := skeem. Päring()

obj. FieldFunc("postitused", func() []postitus {
tagasi s.postitused
})
}

// registerMutation registreerib juurmutatsiooni tüübi.
func(s *server)registerMutatsioon(skeem *skeemiehitaja. skeem) {
obj := skeem. Mutatsioon ()

obj. FieldFunc("kaja", func(args struktuur{ Sõnum string })string {
tagasi args. Sõnum
})
}

// registerPost registreerib postituse tüübi.
func(s *server)registerPostitus(skeem *skeemiehitaja. skeem) {
obj := skeem. Object ("Postitus", postitus{})

obj. FieldFunc("vanus", func(ctx kontekst. Kontekst, p *postitus)string {
reaktiivne. InvalidateAfter (ctx, 5*aeg. Teine)
tagasi aega. Alates (lk. CreatedAt).String()
})
}

// skeem koostab graphql skeemi.
func(s *server)skeem() *graphql.Skeem {
ehitaja := skeemiehitaja. Uus skeem()
s.registerQuery (ehitaja)
s.registerMutation (ehitaja)
s.registerPost (ehitaja)
tagasi ehitaja. MustBuild()
}

funcpeamine() {
// Looge server, looge server ja serveerige skeemi pordis 3030.
server := &server{
postitused: []postitus{
{Pealkiri: "esimene postitus!", Body: "Ma olin siin esimene!", CreatedAt: kell. Nüüd()},
{Title: "graphql", Body: "kas sa kuulsid Thunderist?", CreatedAt: aeg. Nüüd()},
},
}

skeem := server.schema()
sisekaemus. AddIntrospectionToSchema (skeem)

// Skeemi ja graafika eksponeerimine.
http. Handle("/graphql", graphql. Käsitleja (skeem))
http. Handle("/graphiql/", http. StripPrefix("/graphiql/", graphiql. Käitleja()))
http. ListenAndServe(":3030", null)
}

The postitus struct on GraphQL-i skeemi mudel ja server struct on serveri eksemplar. The registerQuery, registerMutatsioonja registerPostitus meetodid on päringute, mutatsioonide ja andmete salvestamise lahendamisfunktsioonid.

The peamine funktsioon algab GraphQL-serveriga pordis 3030 ja GraphQL-i redaktor.

Sisseehitatud pakettidega saate teha päringuid GraphQL API-de kohta

GraphQL on HTTP-põhine ja saate sisseehitatud GraphQL API-sid kasutada http paketti ja muid RESTful API-dele sarnaseid pakette. Go ökosüsteemis on ka paketid, mis võimaldavad teil GraphQL API-sid kiiresti tarbida.