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
29 Studi Kasus: Streaming Upload File
07 Jul 2025
28 Studi Kasus: Streaming Chat Sederhana
07 Jul 2025
6 Inisialisasi Proyek Go untuk GraphQL
07 Jul 2025
4 Arsitektur GraphQL Server dalam Go
07 Jul 2025

29 Studi Kasus: Streaming Upload File

28 Studi Kasus: Streaming Chat Sederhana

6 Inisialisasi Proyek Go untuk GraphQL
