7 Instalasi Library graphql-go
dan Dependensi Tambahan
Oleh: [Nama Anda], Engineer Backend
GraphQL telah menjadi salah satu standar baru dalam mendesain API modern. Salah satu library yang cukup populer untuk mengimplementasikan GraphQL di Go (Golang) adalah graphql-go
. Jika Anda baru memulai, artikel ini akan memandu Anda langkah demi langkah menginstalasi library graphql-go
beserta dependensi tambahan yang sering digunakan dalam proyek nyata. Saya akan lengkapi juga dengan contoh kode, simulasi, serta diagram alur untuk memperjelas proses integrasi.
1. Persiapkan Lingkungan Go
Pastikan Anda sudah menginstal Go. Minimal versi 1.16. Periksa dengan:
go version
Bila belum ada, instalasi bisa dilakukan dari https://golang.org/dl/.
2. Inisialisasi Project Baru
Kita akan memakai Go modules untuk mengelola dependensi. Buat folder projek baru dan inisialisasi modules:
mkdir graphql-tutorial
cd graphql-tutorial
go mod init github.com/yourusername/graphql-tutorial
3. Instalasi Library Utama: graphql-go
graphql-go
adalah engine utama GraphQL di Go. Install dengan perintah:
go get github.com/graph-gophers/graphql-go
go get github.com/graph-gophers/graphql-go/relay
Ini akan menambahkan library graphql-go
di go.mod
.
Penjelasan Singkat Komponen:
Library | Fungsi Utama |
---|---|
github.com/graph-gophers/graphql-go | Parser dan executor query schema GraphQL |
github.com/graph-gophers/graphql-go/relay | Handler HTTP untuk endpoint GraphQL |
4. Pendukung Routing: chi
Sebenarnya, Anda bisa memakai http.ServeMux
. Namun, dalam aplikasi nyata, package router seperti chi sering digunakan.
go get github.com/go-chi/chi/v5
Contoh Integrasi Routing:
import (
"net/http"
"github.com/go-chi/chi/v5"
)
func main() {
r := chi.NewRouter()
r.Post("/query", relayHandler) // relayHandler nanti kita definisikan
http.ListenAndServe(":8080", r)
}
5. Dependensi JSON: graphql-go-tools / Encoding
Library graphql-go
tidak melakukan encoding/decoding JSON response secara otomatis. Kita akan memakai encoding bawaan Go (encoding/json
), namun library pendamping sering digunakan juga, misal graphql-go-tools.
go get github.com/wundergraph/graphql-go-tools
Tapi untuk permulaan, cukup encoding/json
.
6. Dependency Injection & Middleware
Supaya kode tetap modular dan testable, direkomendasikan menggunakan dependency injection, misal google/wire, dan middleware seperti alice.
go get github.com/justinas/alice
go get github.com/google/wire
7. Logging: zerolog
Logging sangat esensial. Salah satu library logging modern adalah zerolog
.
go get github.com/rs/zerolog/log
Simulasi: Setup Endpoint GraphQL Sederhana
Struktur Sederhana Project:
graph TD A[main.go] --> B[chi router] B --> C[GraphQL Schema] C --> D[Resolver] D -->|handle| E[relay.Handler]
Contoh Skema dan Resolver:
File: schema.graphql
type Query {
hello: String!
}
File: main.go
package main
import (
"context"
"embed"
"net/http"
"github.com/go-chi/chi/v5"
"github.com/graph-gophers/graphql-go"
"github.com/graph-gophers/graphql-go/relay"
"github.com/rs/zerolog/log"
)
//go:embed schema.graphql
var sdl embed.FS
type resolver struct{}
func (r *resolver) Hello() string {
log.Info().Msg("handling hello query")
return "Hello, graphql-go!"
}
func main() {
schemaStr, _ := sdl.ReadFile("schema.graphql")
schema := graphql.MustParseSchema(string(schemaStr), &resolver{})
r := chi.NewRouter()
// Middleware logging
r.Use(func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
log.Info().Msgf("Request: %s %s", req.Method, req.URL.Path)
next.ServeHTTP(w, req)
})
})
r.Post("/query", (&relay.Handler{Schema: schema}).ServeHTTP)
log.Info().Msg("GraphQL server started at :8080")
http.ListenAndServe(":8080", r)
}
Coba Query via cURL:
curl -X POST -d '{"query": "{ hello }"}' -H "Content-Type: application/json" localhost:8080/query
Output:
{"data":{"hello":"Hello, graphql-go!"}}
Ringkasan Tabel Dependensi
No | Library | Keterangan | Contoh Penggunaan |
---|---|---|---|
1 | graphql-go | Engine GraphQL utama | Desain schema & proses query |
2 | graphql-go/relay | HTTP Handler GraphQL | Endpoint /query |
3 | go-chi/chi | Router ringan & modular | Routing endpoint |
4 | encoding/json | En/decoding JSON | Parsel response |
5 | zerolog | Logging modern & ringan | Log query/request/error |
6 | justinas/alice | Middleware chaining | Auth/logging wrapper |
7 | google/wire | Dependency injection | Modularisasi resolver |
Diagram Alur End-to-End
sequenceDiagram participant C as Client participant S as Web Server participant G as GraphQL Handler C->>S: POST /query { query } S->>G: Parse and Validate Query G->>G: Execute Resolver Function G->>S: GraphQL Response JSON S->>C: Response (data/error)
Penutup
Menginstal dan men-setup library GraphQL di Go membutuhkan pemahaman komponen-karena arsitekturnya sangat modular. Dengan kombinasi graphql-go
, chi
, dan zerolog
yang tepat, Anda dapat menjalankan server GraphQL production-grade, sekaligus mudah dipelihara dan di-scale. Selanjutnya, pengembangan bisa ditingkatkan dengan integrasi authentication, batching, dan custom directive.
Jangan ragu melakukan eksperimen dengan dependensi lain sesuai kebutuhan projek Anda. Semoga artikel ini menjadi pijakan Anda membangun GraphQL API Go yang andal.
Referensi
- https://github.com/graph-gophers/graphql-go
- https://github.com/go-chi/chi
- https://github.com/rs/zerolog
- https://github.com/google/wire
- https://github.com/justinas/alice
Happy Coding! 🚀
28 Studi Kasus: Streaming Chat Sederhana
Artikel Terhangat
56 Apa Itu Subscription di GraphQL?
08 Aug 2025
78. Men-deploy gRPC Service di Docker
08 Aug 2025
77. gRPC di Kubernetes dengan LoadBalancer
08 Aug 2025
54 Menambahkan Rate Limiting dan Throttling
08 Aug 2025
76. Menyambungkan gRPC Service dengan Kafka
08 Aug 2025

56 Apa Itu Subscription di GraphQL?

78. Men-deploy gRPC Service di Docker

77. gRPC di Kubernetes dengan LoadBalancer

54 Menambahkan Rate Limiting dan Throttling
