Sizin gibi okuyucular MUO'yu desteklemeye yardımcı oluyor. Sitemizdeki bağlantıları kullanarak bir satın alma işlemi gerçekleştirdiğinizde, bir ortaklık komisyonu kazanabiliriz.

GraphQL, RESTful oluştururken karşılaşacağınız sorunların çoğunu çözen HTTP tabanlı bir özelliktir. API'ler. Birçok şemadaki verilere erişmek için tek bir uç nokta kullanabileceğiniz için karmaşık API'ler oluşturmak için uygundur.

GraphQL, REST'te aşırı ve yetersiz alım gibi sorunları azaltır. Ekstra API çağrıları yapmak zorunda kalmadan belirli alanları isteyen bir istemci oluşturabilirsiniz.

Sunuculardan API'lere GraphQL tabanlı uygulamalar oluşturmak için yararlanabileceğiniz birkaç Go paketi vardır.

1. gqlgen Paketi

gqlgen (GraphQL Oluşturucu) GraphQL sunucuları ve API'leri oluşturmak ve oluşturmak için zengin özelliklere sahip, tür açısından güvenli bir pakettir.

gqlgen paketi, şemanızı tanımlamak için GraphQL SDL'yi kullandığınız şema öncelikli bir yaklaşım benimser. Ardından, GraphQL sunucunuzu ve API'nizi ayarlamak için ayarlayabileceğiniz standart kodu oluşturur.

instagram viewer

gqlgen, daha eksiksiz GraphQL paketlerinden biridir. Git ekosistemi. Paket ile belgeler ve örnekler oluşturabilir ve sorgular, mutasyonlar ve abonelikler oluşturabilirsiniz.

gqlgen, tip bağlamaları, katıştırmaları, arayüzleri, üretilen girdileri ve numaralandırmaları sağlar. Paket ayrıca açık izleme, hata günlüğü için kancalar, veri yükleme, eşzamanlılık ve artan sorgu karmaşıklığı için işlevsellik sağlar.

GraphQL şemanızı tanımladıktan sonra—herhangi bir şema öncelikli kitaplıkta olduğu gibi—projenizdeki şemadan standart kod oluşturmak için gqlgen komut satırı uygulamasını kullanacaksınız.

Oluşturmak araçlar.go çalışma dizininizdeki dosya ve eklemek için bu kod satırlarını ekleyin gqlgen paket:

// +yapı araçları

paket aletler

içe aktarmak _ "github.com/99designs/gqlgen"

bu araçlar.go dosya için derleme araçlarını belirtir. gqlgen paket.

gqlgen paketini ve bağımlılıklarını kurmak için çalışma dizininizde şu komutları çalıştırın:

Gitmek github.com/'u kurun99tasarımlar/gqlgen@latest
Gitmek mod düzenli

ile GraphQL paketini çalıştırdığınızda yeni bir GraphQL projesi başlatabilirsiniz. içinde argüman olarak komut:

Gitmek github.com/'u çalıştırın99tasarımlar/gqlgen başlangıç

Şemanızın bir şema.grafql Bir projeyi başlatmak için çalışma dizininizde bulunan dosya.

çalıştır server.go GraphQL uygulamanıza işlevsellik ekledikten sonra GraphQL sunucunuzu başlatmak için dosya:

Gitmek sunucu çalıştırın.Gitmek

2. graphql-go Paketi

graphql-go paketi eksiksiz sağlamayı amaçlayan popüler bir GraphQL kitaplığıdır. GraphQL taslak belirtimi Go'da GraphQL hizmetleri oluşturmak için.

graphql-go paketi çalışma zamanı türleri yaklaşımını benimser; şemanızı Go kodunda bildirme seçeneğiniz vardır ve paket, çalışma zamanını kontrol eder.

Paketle sorguları, mutasyonları ve abonelikleri uygulayabilir ve örnekler oluşturabilirsiniz, ancak oluşturulan numaralandırmalar, girdiler veya açık izleme için işlevsellik yoktur.

graphql-go, hem yerleşik paketleri hem de popüler üçüncü taraf paketlerini destekleyen minimal bir API'ye sahiptir. için desteği vardır OpenTelemetri Ve Açık İzleme standartlar, çözümleyicilere karşı şema tipi denetimi, çözümleyicilerin paralel yürütülmesi ve diğer birçok özellik.

Eğer aşina iseniz ile Go'da RESTful hizmetleri oluşturma http paket, graphql-go paketini kullanımı kolay bulacaksınız.

Graphicql-go paketini ve bağımlılıklarını projenize eklemek için çalışma dizininizde şu komutları çalıştırın:

Gitmek github.com/graph-gophers/graphql- adresini edininGitmek

İşte basit bir GraphQL sunucusu başlatmanın bir örneği:

paket ana

içe aktarmak (
"kayıt"
"ağ/http"

grafikql "github.com/graph-gophers/graphql-Gitmek"
"github.com/graph-gophers/graphql-Gitmek/relay"
)

tip sorgu yapı{}

işlev(_ *sorgu)Merhaba()sicim { geri dönmek "Selam Dünya!" }

işlevana() {
şemaÖrnek := `
tip Sorgu {
merhaba: Dize!
}
`

şema := grafikql. MustParseSchema (schemaExample, &query{})
http. İşle("/query", &relay. İşleyici{Şema: şema})
kayıt. Ölümcül (http. ListenAndServe(":8080", sıfır))
}

bu Merhaba yöntemi sorgu struct, merhaba dünya döndüren GraphQL bitiş noktası için bir çözümleyicidir. bu şemaÖrnek değişken şema tanımıdır ve sunucu 8080 numaralı bağlantı noktasında çalışır. http paketin Dinle ve Sun yöntem.

3. Gök Gürültüsü Paketi

bu Gök gürültüsü çerçeve önce yapı yaklaşımını benimser; GraphQL şemanızı modelleyen bir yapı bildirirsiniz. üretir GraphQL şeması sorgu toplu işleme, canlı sorgular, mutasyonlar, abonelikler ve örnek oluşturma işlemlerini gerçekleştirmek için Go verilerinden.

Thunder, tip bağlamaları ve yansıma tabanlı şema oluşturma dahil diğer özelliklerle tip güvenliği sağlar. yerleşik paralel yürütme ve gruplama, yerleşik bir GraphiQL düzenleyici ve daha büyük GraphQL için bölünmüş şemalar sunucular.

Thunder paketinde gömme, arabirimler, oluşturulan numaralandırmalar veya girdiler, federasyon, açık izleme veya özel hatalar için işlevsellik yoktur. Ancak, diğer popüler paketlere kıyasla kullanımı en kolay olanlardan biridir ve GraphQL deneyiminiz yoksa mükemmel bir başlangıç ​​paketidir.

Thunder paketini ve bağımlılıklarını kurmak için çalışma dizininizin terminalinde bu komutu çalıştırmanız gerekecek:

Gitmek github.com/samsarahq/thunder/graphql'yi edinin

Thunder paketi ile basit bir GraphQL sunucusunu başlatmak için şema için bir yapı modeli bildirmeniz, çözümleyicileri yazmanız ve sunucuyu başlatmanız gerekir.

içe aktarmak (
"bağlam"
"ağ/http"
"zaman"

"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 postalamak yapı {
Başlık sicim
Vücut sicim
Zamanında oluşturuldu. Zaman
}

// sunucu bizim grafik sunucumuzdur.
tip sunucu yapı {
gönderiler []gönderi
}

// registerQuery, kök sorgu türünü kaydeder.
işlev(s *sunucu)kayıt sorgusu(şema *schemabuilder. Şema) {
nesne := şema. Sorgu()

nesne FieldFunc("yazılar", işlev() []postalamak {
geri dönmek s.gönderiler
})
}

// registerMutation, kök mutasyon türünü kaydeder.
işlev(s *sunucu)kayıtMutasyon(şema *schemabuilder. Şema) {
nesne := şema. mutasyon()

nesne FieldFunc("yankı", işlev(argo yapı{ İleti sicim })sicim {
geri dönmek argümanlar İleti
})
}

// registerPost, gönderi türünü kaydeder.
işlev(s *sunucu)Kayıt Ol(şema *schemabuilder. Şema) {
nesne := şema. Nesne ("Gönder", gönderi{})

nesne FieldFunc("yaş", işlev(ctx bağlamı. Bağlam, p *yazı)sicim {
reaktif. Sonra geçersiz kıl (ctx, 5*zaman. Saniye)
geri dönmek zaman. beri (s. CreatedAt).String()
})
}

// şema, graphql şemasını oluşturur.
işlev(s *sunucu)şema() *grafikql.Şema {
oluşturucu := şema oluşturucu. YeniŞema()
s.registerQuery (oluşturucu)
s.registerMutation (oluşturucu)
s.registerPost (oluşturucu)
geri dönmek inşaatçı Yapılması Gereken()
}

işlevana() {
// Bir sunucu oluşturun, bir sunucu oluşturun ve şemayı 3030 numaralı bağlantı noktasında sunun.
sunucu := &sunucu{
gönderiler: []gönderi{
{Title: "ilk gönderi!", Gövde: "İlk ben buradaydım!", CreatedAt: zaman. Şimdi()},
{Title: "graphql", Gövde: "Thunder'ı duydunuz mu?", CreatedAt: zaman. Şimdi()},
},
}

şema := server.schema()
iç gözlem AddIntrospectionToSchema (şema)

// Şema ve grafiği açığa çıkarın.
http. İşle("/graphql",graphql. İşleyici (şema))
http. Kol("/graphiql/", http. StripPrefix("/grafiql/", grafik. işleyici()))
http. ListenAndServe(":3030", sıfır)
}

bu postalamak struct, GraphQL şeması için modeldir ve sunucu yapı, sunucu örneğidir. bu kayıt sorgusu, kayıtMutasyon, Ve Kayıt Ol yöntemler sorgular, mutasyonlar ve veri depolama için çözümleyici işlevlerdir.

bu ana işlev, bağlantı noktasındaki GraphQL sunucusuyla başlar 3030 ve GraphQL düzenleyicisi.

Yerleşik Paketlerle Go'da GraphQL API'lerini Sorgulayabilirsiniz

GraphQL HTTP tabanlıdır ve GraphQL API'lerini yerleşik olarak kullanabilirsiniz. http paket ve RESTful API'lerine benzer diğer paketler. Ayrıca Go'nun ekosisteminde GraphQL API'lerini hızlı bir şekilde tüketmenizi sağlayacak paketler var.