Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
09 Oct 2025 · 5 mnt baca ·Artikel 101 / 125
Go

101 Apa Itu gqlgen? GraphQL Code Generation untuk Go

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

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:

LibraryPendekatanType SafetyOtomasi KodePopularitas
gqlgenSchema-first✔️✔️⭐⭐⭐⭐⭐
graphql-goCode-first⭐⭐⭐
ent+entgqlCode/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:

MERMAID
flowchart TD
    A[Schema.graphql] -->|gqlgen generate| B[Resolver Stubs]
    B --> C[Kode Go]
    C --> D[API GraphQL Siap Digunakan]
  1. Anda menulis schema di schema.graphql.
  2. Perintah gqlgen generate menghasilkan kode Go dan “stub” untuk setiap resolver.
  3. Anda melengkapi fungsi resolver sesuai kebutuhan bisnis.
  4. 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:

bash
1mkdir bookapi-gql && cd bookapi-gql
2go mod init bookapi-gql
3go get github.com/99designs/gqlgen

Inisialisasi struktur project gqlgen:

bash
1go run github.com/99designs/gqlgen init

Akan terbuat beberapa file penting:

  • schema.graphqls
  • resolver.go
  • generated.go, dsb.

2. Definisikan Schema

Edit schema.graphqls:

graphql
 1type Book {
 2    id: ID!
 3    title: String!
 4    author: String!
 5}
 6
 7type Query {
 8    books: [Book!]!
 9    book(id: ID!): Book
10}
11
12type Mutation {
13    addBook(title: String!, author: String!): Book!
14}

3. Generate Kode

Jalankan:

bash
1go 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

go
 1package graph
 2
 3import (
 4    "bookapi-gql/graph/model"
 5    "context"
 6    "strconv"
 7)
 8
 9// Simulasi database in-memory
10var books = []*model.Book{
11    {ID: "1", Title: "Clean Code", Author: "Robert C. Martin"},
12    {ID: "2", Title: "The Pragmatic Programmer", Author: "Andy Hunt"},
13}
14
15// Query Resolver Implementation
16func (r *queryResolver) Books(ctx context.Context) ([]*model.Book, error) {
17    return books, nil
18}
19
20func (r *queryResolver) Book(ctx context.Context, id string) (*model.Book, error) {
21    for _, book := range books {
22        if book.ID == id {
23            return book, nil
24        }
25    }
26    return nil, nil
27}
28
29// Mutation Resolver Implementation
30func (r *mutationResolver) AddBook(ctx context.Context, title string, author string) (*model.Book, error) {
31    id := strconv.Itoa(len(books) + 1)
32    book := &model.Book{ID: id, Title: title, Author: author}
33    books = append(books, book)
34    return book, nil
35}

5. Konfigurasikan Server

Biasanya file starter server.go sudah ada:

go
 1package main
 2
 3import (
 4    "log"
 5    "net/http"
 6    "os"
 7
 8    "bookapi-gql/graph"
 9    "bookapi-gql/graph/generated"
10
11    "github.com/99designs/gqlgen/graphql/handler"
12    "github.com/99designs/gqlgen/graphql/playground"
13)
14
15func main() {
16    srv := handler.NewDefaultServer(generated.NewExecutableSchema(generated.Config{Resolvers: &graph.Resolver{}}))
17
18    http.Handle("/", playground.Handler("GraphQL playground", "/query"))
19    http.Handle("/query", srv)
20
21    log.Printf("connect to http://localhost:8080/ for GraphQL playground")
22    log.Fatal(http.ListenAndServe(":8080", nil))
23}

Jalankan server:

bash
1go run .

Simulasi Operasi

Dengan Playground di http://localhost:8080/, coba operasi berikut:

Query Semua Buku

graphql
1query {
2  books {
3    id
4    title
5    author
6  }
7}

Response:

json
1{
2  "data": {
3    "books": [
4      {"id": "1", "title": "Clean Code", "author": "Robert C. Martin"},
5      {"id": "2", "title": "The Pragmatic Programmer", "author": "Andy Hunt"}
6    ]
7  }
8}

Mutation Tambah Buku

graphql
1mutation {
2  addBook(title: "Go in Action", author: "William Kennedy") {
3    id
4    title
5    author
6  }
7}

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:

graphql
1scalar DateTime
2
3directive @auth(role: String) on FIELD_DEFINITION

Konfigurasikan di Go dan mapkan via file gqlgen.yml—dengan full type safety!


Kelebihan & Kekurangan gqlgen

KelebihanKekurangan
OtomatisasiCode selalu sync dengan schemaPerubahan schema → regenerate
Type SafetyDeteksi error di compile-timeBelajar schema-first
PerformanceNyaris zero overhead, tipe-nya Go nativeKonfigurasi awal agak detail
CommunityEkosistem luas, sering diupdateDokumentasi 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.

Danger
Jika Anda mengutamakan maintainability dan type-safety, gqlgen adalah pilihan utama untuk membangun GraphQL API di Go.

Referensi


Danger
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 Terkait

💬 Komentar