101 Apa Itu gqlgen? GraphQL Code Generation untuk Go
Sejak kehadiran GraphQL sebagai alternatif REST API, banyak pengembang mulai merasakan kemudahan dalam memanage data yang kompleks dan efisien. Namun, implementasi GraphQL pada bahasa Go sempat menjadi tantangan tersendiri—khususnya soal type safety dan penulisan boilerplate yang cukup melelahkan. Dari permasalahan inilah, gqlgen
hadir sebagai solusi.
Artikel ini akan membahas apa itu gqlgen, kenapa harus digunakan, dan bagaimana cara memulainya. Mari masuk lebih dalam mengenai ‘GraphQL Code Generation’ untuk Go beserta contoh kode, simulasi alur, tabel, dan diagram. Siap? Let’s dive!
Apa itu gqlgen?
gqlgen
adalah sebuah framework library open source untuk membangun server GraphQL di Go. Berbeda dengan pendekatan lain yang biasanya code-first (mendefinisikan skema dari kode), gqlgen
mengambil pendekatan schema-first — artinya, Anda mendefinisikan schema GraphQL menggunakan file .graphql
, lalu gqlgen
akan mengenerate kode Go-nya untuk Anda.
Dengan strategi code generation ini, gqlgen
memberikan:
- Type Safety — Semua operasi GraphQL langsung terhubung ke model Go.
- Minim Boilerplate — Fungsi-fungsi penanganan resolver otomatis di-generate.
- Integrasi mudah — Dukungan middleware, directives, dan custom scalar.
- Simple to get started — Konfigurasi sederhana, reset dengan satu perintah.
Mengapa Menggunakan gqlgen?
Mari lihat tabel di bawah sebagai perbandingan dengan alternatif lain:
Library | Pendekatan | Type Safety | Otomasi Kode | Popularitas |
---|---|---|---|---|
gqlgen | Schema-first | ✔️ | ✔️ | ⭐⭐⭐⭐⭐ |
graphql-go | Code-first | ❌ | ❌ | ⭐⭐⭐ |
ent+entgql | Code/schema | ✔️ | Partial | ⭐⭐⭐⭐ |
Kelebihan utama gqlgen adalah code yang dihasilkan sesuai dengan schema, sehingga refactor schema tidak perlu risau tentang kode yang tertinggal — cukup generate ulang.
Arsitektur dan Flow gqlgen
Sebelum lanjut, pahami diagram alur sederhananya berikut dengan mermaid:
flowchart TD A[Schema.graphql] -->|gqlgen generate| B[Resolver Stubs] B --> C[Kode Go] C --> D[API GraphQL Siap Digunakan]
- Anda menulis schema di
schema.graphql
. - Perintah
gqlgen generate
menghasilkan kode Go dan “stub” untuk setiap resolver. - Anda melengkapi fungsi resolver sesuai kebutuhan bisnis.
- Server API GraphQL siap digunakan.
Studi Kasus: Membuat API Book Store Sederhana
Langkah berikut akan memandu Anda membuat API sederhana untuk daftar buku.
1. Inisialisasi Project
Buat folder, inisialisikan Go module, dan install gqlgen:
mkdir bookapi-gql && cd bookapi-gql
go mod init bookapi-gql
go get github.com/99designs/gqlgen
Inisialisasi struktur project gqlgen:
go run github.com/99designs/gqlgen init
Akan terbuat beberapa file penting:
schema.graphqls
resolver.go
generated.go
, dsb.
2. Definisikan Schema
Edit schema.graphqls
:
type Book {
id: ID!
title: String!
author: String!
}
type Query {
books: [Book!]!
book(id: ID!): Book
}
type Mutation {
addBook(title: String!, author: String!): Book!
}
3. Generate Kode
Jalankan:
go run github.com/99designs/gqlgen generate
Ini akan menghasilkan stub handler di resolver.go
, model di model/models_gen.go
, dan kode GraphQL lainnya.
4. Lengkapi Resolver
Edit resolver.go
package graph
import (
"bookapi-gql/graph/model"
"context"
"strconv"
)
// Simulasi database in-memory
var books = []*model.Book{
{ID: "1", Title: "Clean Code", Author: "Robert C. Martin"},
{ID: "2", Title: "The Pragmatic Programmer", Author: "Andy Hunt"},
}
// Query Resolver Implementation
func (r *queryResolver) Books(ctx context.Context) ([]*model.Book, error) {
return books, nil
}
func (r *queryResolver) Book(ctx context.Context, id string) (*model.Book, error) {
for _, book := range books {
if book.ID == id {
return book, nil
}
}
return nil, nil
}
// Mutation Resolver Implementation
func (r *mutationResolver) AddBook(ctx context.Context, title string, author string) (*model.Book, error) {
id := strconv.Itoa(len(books) + 1)
book := &model.Book{ID: id, Title: title, Author: author}
books = append(books, book)
return book, nil
}
5. Konfigurasikan Server
Biasanya file starter server.go
sudah ada:
package main
import (
"log"
"net/http"
"os"
"bookapi-gql/graph"
"bookapi-gql/graph/generated"
"github.com/99designs/gqlgen/graphql/handler"
"github.com/99designs/gqlgen/graphql/playground"
)
func main() {
srv := handler.NewDefaultServer(generated.NewExecutableSchema(generated.Config{Resolvers: &graph.Resolver{}}))
http.Handle("/", playground.Handler("GraphQL playground", "/query"))
http.Handle("/query", srv)
log.Printf("connect to http://localhost:8080/ for GraphQL playground")
log.Fatal(http.ListenAndServe(":8080", nil))
}
Jalankan server:
go run .
Simulasi Operasi
Dengan Playground di http://localhost:8080/
, coba operasi berikut:
Query Semua Buku
query {
books {
id
title
author
}
}
Response:
{
"data": {
"books": [
{"id": "1", "title": "Clean Code", "author": "Robert C. Martin"},
{"id": "2", "title": "The Pragmatic Programmer", "author": "Andy Hunt"}
]
}
}
Mutation Tambah Buku
mutation {
addBook(title: "Go in Action", author: "William Kennedy") {
id
title
author
}
}
Custom Scalar & Directive
Salah satu kekuatan gqlgen adalah dukungan custom scalar dan directive. Misal ingin memakai DateTime
sebagai scalar baru atau control auth dengan directive:
scalar DateTime
directive @auth(role: String) on FIELD_DEFINITION
Konfigurasikan di Go dan mapkan via file gqlgen.yml
—dengan full type safety!
Kelebihan & Kekurangan gqlgen
Kelebihan | Kekurangan | |
---|---|---|
Otomatisasi | Code selalu sync dengan schema | Perubahan schema → regenerate |
Type Safety | Deteksi error di compile-time | Belajar schema-first |
Performance | Nyaris zero overhead, tipe-nya Go native | Konfigurasi awal agak detail |
Community | Ekosistem luas, sering diupdate | Dokumentasi kadang belum update |
Kesimpulan
gqlgen
adalah game changer untuk developer Go yang ingin membangun layanan GraphQL tanpa harus menulis boilerplate tak berujung. Dengan pendekatan schema-first dan type-safe code generation, Anda bisa fokus ke logika bisnis dan refactor schema tanpa khawatir codebase berantakan.
Jika Anda mengutamakan maintainability dan type-safety, gqlgen adalah pilihan utama untuk membangun GraphQL API di Go.
Referensi
Saya harap tulisan ini memperjelas konsep gqlgen dan mengilustrasikan betapa powerful-nya code generation dalam ekosistem Go. Jangan ragu untuk diskusi atau sharing pengalaman di kolom komentar. 🚀
#gqlgen #graphql #golang #backenddevelopment
Artikel Terhangat
102 Menyiapkan Proyek gqlgen Pertama Anda
10 Oct 2025
99 Kontribusi ke Open Source graphql-go
10 Oct 2025
98 Membuat Plugin Sendiri untuk graphql-go
10 Oct 2025
96 Migrasi REST API ke GraphQL
10 Oct 2025

102 Menyiapkan Proyek gqlgen Pertama Anda

99 Kontribusi ke Open Source graphql-go

98 Membuat Plugin Sendiri untuk graphql-go
