Pembaca seperti Anda membantu mendukung MUO. Saat Anda melakukan pembelian menggunakan tautan di situs kami, kami dapat memperoleh komisi afiliasi.

GraphQL adalah spesifikasi berbasis HTTP yang menyelesaikan sebagian besar masalah yang akan Anda temui saat membangun RESTful Lebah. Ini cocok untuk membangun API yang kompleks karena Anda dapat menggunakan satu titik akhir untuk mengakses data dari banyak skema.

GraphQL memitigasi masalah seperti over-fetching dan under-fetching di REST. Anda dapat membuat klien yang meminta bidang tertentu tanpa harus melakukan panggilan API tambahan.

Ada beberapa paket Go yang bisa Anda manfaatkan untuk membangun aplikasi berbasis GraphQL, mulai dari server hingga API.

1. Paket gqlgen

gqlgen (Generator GraphQL) adalah paket yang kaya fitur dan aman untuk menghasilkan dan membangun server dan API GraphQL.

Paket gqlgen mengambil pendekatan skema-pertama, di mana Anda menggunakan SDL GraphQL untuk menentukan skema Anda. Ini kemudian menghasilkan kode boilerplate yang dapat Anda sesuaikan untuk mengatur server dan API GraphQL Anda.

instagram viewer

gqlgen adalah salah satu paket GraphQL yang lebih lengkap ekosistem Go. Anda dapat membuat dokumentasi dan contoh dengan paket dan membuat kueri, mutasi, dan langganan.

gqlgen memastikan binding tipe, embedding, antarmuka, input yang dihasilkan, dan enum. Paket ini juga menyediakan fungsionalitas untuk penelusuran terbuka, pengait untuk log kesalahan, pemuatan data, konkurensi, dan peningkatan kompleksitas kueri.

Setelah menentukan skema GraphQL Anda—seperti yang Anda lakukan dengan pustaka yang mengutamakan skema—Anda akan menggunakan aplikasi baris perintah gqlgen untuk membuat kode boilerplate dari skema di proyek Anda.

Membuat tools.go file di direktori kerja Anda dan tambahkan baris kode ini untuk memasukkan gqlgen kemasan:

// +alat bangun

kemasan peralatan

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

Itu tools.go file menentukan alat bangun untuk gqlgen kemasan.

Jalankan perintah ini di direktori kerja Anda untuk menginstal paket gqlgen dan dependensinya:

pergi instal github.com/99desain/gqlgen@latest
pergi mod rapi

Anda dapat menginisialisasi proyek GraphQL baru saat Anda menjalankan paket GraphQL dengan init perintah sebagai argumen:

pergi jalankan github.com/99desain/gqlgen init

Anda harus memiliki skema Anda di a skema.graphql file yang terletak di direktori kerja Anda untuk menginisialisasi proyek.

Jalankan server.go file untuk memulai server GraphQL Anda setelah menambahkan fungsionalitas ke aplikasi GraphQL Anda:

pergi jalankan server.pergi

2. Paket graphql-go

Paket graphql-go adalah perpustakaan GraphQL populer yang bertujuan untuk menyediakan yang lengkap Spesifikasi draf GraphQL untuk membangun layanan GraphQL di Go.

Paket graphql-go menggunakan pendekatan tipe runtime; Anda memiliki opsi untuk mendeklarasikan skema Anda dalam kode Go, dan paket memeriksa waktu proses.

Anda dapat menerapkan kueri, mutasi, dan langganan serta membuat contoh dengan paket, tetapi tidak ada fungsi untuk enum, input, atau pelacakan terbuka yang dibuat.

graphql-go menampilkan API minimal dengan dukungan untuk paket bawaan dan paket pihak ketiga yang populer. Ini memiliki dukungan untuk OpenTelemetry Dan OpenTracing standar, pengecekan tipe skema terhadap resolver, eksekusi paralel dari resolver, dan banyak fitur lainnya.

Jika Anda akrab dengan membangun layanan RESTful di Go dengan http kemasan, Anda akan menemukan paket graphql-go mudah digunakan.

Jalankan perintah ini di direktori kerja Anda untuk menambahkan paket graphql-go dan dependensinya ke proyek Anda:

pergi dapatkan github.com/graph-gophers/graphql-pergi

Berikut adalah contoh memulai server GraphQL sederhana:

kemasan utama

impor (
"catatan"
"net/http"

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

jenis pertanyaan struct{}

fungsi(_ *permintaan)Halo()rangkaian { kembali "Halo Dunia!" }

fungsiutama() {
contoh skema := `
jenis Kueri {
halo: Tali!
}
`

skema := graphql. MustParseSchema (schemaExample, &query{})
http. Tangani("/permintaan", &relai. Handler{Skema: skema})
catatan. Fatal (http. DengarkanDanServis(":8080", nol))
}

Itu Halo metode dari pertanyaan struct adalah penyelesai untuk titik akhir GraphQL yang mengembalikan halo dunia. Itu contoh skema variabel adalah definisi skema, dan server akan berjalan pada port 8080 dengan http paket Dengarkan Dan Sajikan metode.

3. Paket Guntur

Itu Guruh framework mengambil pendekatan struct first; Anda mendeklarasikan struct yang memodelkan skema GraphQL Anda. Ini menghasilkan Skema GraphQL dari data Go untuk menangani pengelompokan kueri, kueri langsung, mutasi, langganan, dan pembuatan contoh.

Thunder memberikan keamanan tipe dengan binding tipe dan fitur lainnya, termasuk pembuatan skema berbasis refleksi, eksekusi dan batching paralel bawaan, editor GraphiQL bawaan, dan skema terpisah untuk GraphQL yang lebih besar server.

Tidak ada fungsi untuk penyematan, antarmuka, enum atau input yang dihasilkan, federasi, pelacakan terbuka, atau kesalahan khusus dalam paket Thunder. Namun, ini adalah salah satu yang paling mudah digunakan dibandingkan dengan paket populer lainnya dan merupakan paket awal yang sangat baik jika Anda tidak memiliki pengalaman GraphQL.

Anda harus menjalankan perintah ini di terminal direktori kerja Anda untuk menginstal paket Thunder dan dependensinya:

pergi dapatkan github.com/samsarahq/thunder/graphql

Anda harus mendeklarasikan model struct untuk skema, menulis resolver, dan membuat instance server untuk memulai server GraphQL sederhana dengan paket Thunder.

impor (
"konteks"
"net/http"
"waktu"

"github.com/samsarahq/thunder/graphql"
"github.com/samsarahq/thunder/graphql/graphiql"
"github.com/samsarahq/thunder/graphql/introspeksi"
"github.com/samsarahq/thunder/graphql/schemabuilder"
"github.com/samsarahq/thunder/reaktif"
)

jenis pos struct {
Judul rangkaian
Tubuh rangkaian
Dibuat Pada waktu. Waktu
}

// server adalah server graphql kami.
jenis server struct {
posting [] posting
}

// registerQuery mendaftarkan tipe kueri root.
fungsi(s *server)registerQuery(skema *pembuat skema. Skema) {
obj := skema. Pertanyaan()

obj. FieldFunc("postingan", fungsi() []pos {
kembali s.posting
})
}

// registerMutation mendaftarkan jenis mutasi root.
fungsi(s *server)registerMutation(skema *pembuat skema. Skema) {
obj := skema. Mutasi()

obj. FieldFunc("gema", fungsi(argumen struct{ Pesan rangkaian })rangkaian {
kembali argumen. Pesan
})
}

// registerPost mendaftarkan jenis posting.
fungsi(s *server)daftarPost(skema *pembuat skema. Skema) {
obj := skema. Objek("Posting", posting{})

obj. FieldFunc("umur", fungsi(konteks ctx. Konteks, p *posting)rangkaian {
reaktif. InvalidateAfter (ctx, 5*waktu. Kedua)
kembali waktu. Sejak (hal. CreatedAt).String()
})
}

// skema membangun skema graphql.
fungsi(s *server)skema() *graphql.Skema {
pembangun := pembuat skema. Skema Baru()
s.registerQuery (pembangun)
s.registerMutation (pembangun)
s.registerPost (pembangun)
kembali pembangun. Harus Dibangun()
}

fungsiutama() {
// Instansiasi server, buat server, dan sajikan skema pada port 3030.
server := &server{
postingan: []postingan{
{Judul: "postingan pertama!", Isi: "Saya di sini dulu!", Dibuat Pada: waktu. Sekarang()},
{Title: "graphql", Body: "apakah Anda mendengar tentang Thunder?", CreatedAt: time. Sekarang()},
},
}

skema := server.skema()
introspeksi. AddIntrospectionToSchema (skema)

// Ekspos skema dan grafik.
http. Tangani("/graphql", graphql. Penangan (skema))
http. Tangani("/graphiql/", http. StripPrefix("/graphiql/", graphiql. Penangan()))
http. DengarkanDanServis(":3030", nol)
}

Itu pos struct adalah model untuk skema GraphQL, dan server struct adalah instance server. Itu registerQuery, registerMutation, Dan daftarPost metode adalah fungsi penyelesai untuk kueri, mutasi, dan penyimpanan data.

Itu utama fungsi dimulai dengan server GraphQL pada port 3030 dan editor GraphQL.

Anda Dapat Meminta API GraphQL di Go Dengan Paket Bawaan

GraphQL berbasis HTTP, dan Anda dapat menggunakan API GraphQL dengan built-in http paket dan paket lain yang mirip dengan RESTful API. Ada juga paket di ekosistem Go yang memungkinkan Anda menggunakan API GraphQL dengan cepat.