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

5 Persiapan Tools & Lingkungan Pengembangan GraphQL dengan Go

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

5 Persiapan Tools & Lingkungan Pengembangan GraphQL dengan Go

GraphQL pelan namun pasti mulai menjadi backbone modern API di banyak tim engineering lintas industri. Kelebihannya dalam query data yang fleksibel, dokumentasi self-explanatory, dan efisiensi bandwidth membuat banyak backend engineer serta startup mulai meninggalkan RESTful API. Namun, membangun sistem GraphQL (khususnya dengan bahasa Go) bukan cuma soal code. Ia membutuhkan ekosistem alat yang tepat, lingkungan terpadu, sampai struktur kode yang scalable.

Pada artikel ini, saya ingin membagikan 5 persiapan krusial dalam merancang tools dan lingkungan untuk pengembangan GraphQL berbasis Go (Golang). Artikel ini bukan hanya berbicara “pakai framework apa?” — melainkan tentang membangun fondasi development yang stabil dan developer friendly. Beberapa hal yang dibahas antara lain:

  • Pilihan library dan tools GraphQL di ekosistem Go
  • Simulasi setup project (dengan contoh kode)
  • Integrasi database dan migrasi schema
  • Testing pipeline
  • Autodokumentasi dan simulasi query

Langsung saja kita simak satu demi satu.


1. Memilih Framework/Library GraphQL di Go

Go dikenal memiliki philosophy “minimalis, kurang magic”, sehingga framework yang populer adalah yang predictable dan performant. Untuk GraphQL, ada dua pilihan yang banyak digunakan:

LibraryFitur UtamaKelebihanKekurangan
graphql-goSchema-First, TypedSangat mirip Apollo Server, integrasi mudah, runtime efisienKurang intuitif untuk resolver kompleks, sedikit verbose
gqlgenCodegen, Typed, ModularGenerate model dari schema, workflow familiar untuk tim besarSetup pertama bisa membingungkan bagi yang baru

Rekomendasi: Untuk project Go yang bersifat produktif, gunakan gqlgen karena menghasilkan code Go yang strongly typed, mudah maintain, cocok untuk perusahaan/startup yang ingin API-nya robust sejak awal.


2. Struktur Folder & Setup Development

Supaya scalable, mulailah dengan arsitektur clean yang mudah dipahami. Berikut contoh layout project GraphQL berbasis Go menggunakan gqlgen :

bash
 1your-graphql-golang/
 2 3├── graph/              # resolver & business logic
 4│   ├── model/          # tipe data (struct)
 5│   ├── resolver.go
 6│   └── schema.graphqls # schema GraphQL
 7 8├── database/
 9│   └── migration.sql   # skema DB & migrasi
1011├── go.mod / go.sum
12├── gqlgen.yml          # konfigurasi gqlgen
13├── main.go
14└── README.md

Diagram alur respons sederhana bisa digambarkan seperti berikut:

MERMAID
graph LR
  C[Client] -->|GraphQL Query| API[Go GraphQL Server]
  API -->|Call| Resolver[GraphQL Resolver]
  Resolver -->|Query| DB[(Database)]
  DB -->|Data| Resolver
  Resolver -->|Return| API
  API -->|Response| C

Semua query dari client akan melewati urutan ini: Client ⟶ GraphQL server ⟶ Resolver ⟶ Database ⟶ Resolver ⟶ Client.


Langkah setup:

  • Install Dependency:
    bash
    1go mod init your-graphql-golang
    2go get github.com/99designs/gqlgen
    3go run github.com/99designs/gqlgen init
  • Ini akan membuat struktur graph/ dan file skeleton yang siap dikembangkan.

3. Integrasi Database & Migrasi

Setelah schema GraphQL siap, pastikan backend Go sudah bisa bicara ke database (MySQL, PostgreSQL, SQLite, dsb). Gunakan ORM populer di Go seperti gorm atau ent .

Misal kita simulasikan integrasi dengan PostgreSQL menggunakan gorm:

go
 1import (
 2    "gorm.io/driver/postgres"
 3    "gorm.io/gorm"
 4)
 5
 6func InitDB() *gorm.DB {
 7    dsn := "host=localhost user=postgres password=secret dbname=graphql_db port=5432 sslmode=disable"
 8    db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
 9    if err != nil {
10        panic("failed to connect database")
11    }
12    return db
13}
Integrasikan modul database ini ke resolver atau service logic.

Selain itu, untuk schema migration, gunakan tools seperti golang-migrate supaya setiap deploy bisa mengatur versi schema database secara otomatis dan aman:

bash
1# Contoh migrasi dengan migrate
2migrate -database "postgres://user:pass@localhost:5432/dbname?sslmode=disable" -path ./database up

4. Testing Pipeline (Unit, Integration, Playground)

Testing sangat penting untuk GraphQL, terutama karena field yang dipanggil bisa berbeda pada setiap query. Saya sarankan membangun 3 macam test:

  • Unit Test Function/Resolver
  • Integration Test Query (end-to-end fetch)
  • Query Simulation (Playground/GraphQL Inspector)

Contoh Unit Test Resolver (menggunakan testing):

go
 1func TestUserResolver(t *testing.T) {
 2    ctx := context.TODO()
 3    // Mock DB or Service Layer...
 4    resp, err := resolver.Query().User(ctx, userID)
 5    if err != nil {
 6        t.Errorf("Expected no error, got %v", err)
 7    }
 8    if resp.ID != userID {
 9        t.Errorf("Expected ID %v, got %v", userID, resp.ID)
10    }
11}

Query Integration Test (gunakan subpackage /integration_test/)

  • Simulasikan query HTTP via net/http
  • Validate http response dan JSON body

Playground:
Kebanyakan framework (termasuk gqlgen) otomatis menyediakan dashboard GraphQL playground. Di aplikasi production, bisa diaktifkan pada development only.


5. Autodokumentasi & Simulasi Query

Salah satu kelebihan GraphQL adalah schema-nya self-documenting. Kamu bisa generate dokumentasi dari schema .graphqls atau via tools:

  • GraphQL Playground: Go Playground biasanya accessible di /playground, otomatis sync schema & type docs.
  • Insomnia/Altair : Bisa digunakan untuk simulate query, test mutation, dan generate collection.
  • Graphdoc: Untuk generate HTML Docs dari schema.

Contoh query di playground:

graphql
1query {
2  users {
3    id
4    name
5    createdAt
6  }
7}

Kamu akan mendapat output otomatis:

json
1{
2  "data": {
3    "users": [
4      { "id": "1", "name": "Vivi", "createdAt": "2024-06-02T10:00Z" }
5    ]
6  }
7}


Kesimpulan

Pengembangan GraphQL di Go sangat powerful jika environment dibangun dengan rapi. Ringkasan tools & preparation yang saya sarankan:

  1. Gunakan gqlgen sebagai fundamental framework.
  2. Struktur project yang modular: pisahkan schema, resolver, model, dan adaptor database.
  3. Integrasikan ORM dan tool migrasi (misal gorm + golang-migrate) sedari awal.
  4. Automate testing pipeline mulai dari unit, integration sampai playground simulation.
  5. Self-documenting API dengan dashboard playground dan schema generator.

Dengan toolset dan workflow di atas, kamu akan siap membangun GraphQL API yang scalable & production ready di ekosistem Go.

Feedback? Tips lain? Silakan share pengalamanmu membangun GraphQL di Go di kolom komentar! 🚀


Referensi & Resources:

Artikel Terkait

💬 Komentar