103 Inisialisasi gqlgen dengan go run github.com/99designs/gqlgen init
Jika Anda sedang mengeksplorasi GraphQL di ekosistem Go, hampir pasti Anda akan menemukan gqlgen. Library buatan tim 99designs ini sudah menjadi de facto standard pada codebase modern yang ingin membangun API GraphQL dengan Go. Salah satu alasan mengapa gqlgen disukai adalah kemampuannya mengenerate kode berbasis schema-first, yang dapat menjaga konsistensi dan kecepatan prototyping.
Pada artikel kali ini, saya akan membahas langkah-langkah inisialisasi gqlgen dari nol, memakai perintah satu baris:go run github.com/99designs/gqlgen init
Kita akan melihat kode hasil generate-nya, simulasi end-to-end, hingga bagaimana cara memahami flow nya menggunakan diagram. Ini adalah fondasi utama yang perlu dipahami sebelum melangkah ke tahap lanjut seperti integrasi database ataupun authentication.
Mengapa Perlu gqlgen?
Mari kita bandingkan dengan pendekatan tradisional REST API:
REST API (net/http) | GraphQL dengan gqlgen |
---|---|
Banyak endpoint | Single endpoint |
Over/Under-fetching data | Fetch sesuai kebutuhan |
Manual handler & routing | Otomatis via schema |
Dokumentasi sering manual | Auto via Playground/Tools |
GraphQL dengan gqlgen mengurangi beban boilerplate dan menyediakan tooling out-of-the-box, seperti automatic schema binding serta dokumentasi interaktif.
Langkah Inisialisasi gqlgen
Mari mulai dari proyek kosong:
$ mkdir gqlgen-demo && cd gqlgen-demo
$ go mod init github.com/username/gqlgen-demo
Langkah selanjutnya—yang banyak pemula skip karena ada shortcut npm/yarn/gitsubmodule adalah command super powerful ini:
go run github.com/99designs/gqlgen init
Outputnya mirip berikut:
go: downloading github.com/99designs/gqlgen ...
Execing "go run github.com/99designs/gqlgen init"
Generated server
Direktori Anda sekarang punya struktur seperti ini:
.
├── go.mod
├── gqlgen.yml
├── schema.graphqls
├── graph/
│ ├── generated/
│ ├── model/
│ ├── resolver.go
│ └── schema.resolvers.go
└── server.go
Mari kita bahas beberapa file pentingnya.
Penjelasan Struktur File
File/Folder | Fungsi |
---|---|
gqlgen.yml | Konfigurasi utama, path, package, hooks |
schema.graphqls | Tempat mendefinisikan schema GraphQL, berbasis SDL |
graph/ | Semua kode terkait logic, resolver, model, dsb |
graph/generated/ | (AUTO) Kode generate internal oleh gqlgen |
graph/model/ | Model-model sesuai schema |
server.go | Bootstrap HTTP server menggunakan gqlgen |
schema.graphqls
Template schema yang digenerate:
type Todo {
id: ID!
text: String!
done: Boolean!
}
type Query {
todos: [Todo!]!
}
type Mutation {
createTodo(text: String!): Todo!
}
Ini adalah contoh kecil agar bisa langsung run & test.
server.go
Kode entrypoint server akan terlihat seperti ini:
package main
import (
"log"
"net/http"
"github.com/99designs/gqlgen/graphql/handler"
"github.com/99designs/gqlgen/graphql/playground"
"gqlgen-demo/graph"
"gqlgen-demo/graph/generated"
)
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))
}
Notice playground
di-attach di root path untuk helper testing API secara interaktif.
Simulasi: Memulai Server & Tes
Cukup run:
go run server.go
Lalu buka browser ke http://localhost:8080/, akan keluar interface GraphQL Playground.
Query Simulasi
Menambahkan Todo:
mutation {
createTodo(text: "Belajar gqlgen") {
id
text
done
}
}
Mengambil Semua Todo:
query {
todos {
id
text
done
}
}
Karena backend masih memory, setiap restart data akan hilang—tapi sudah cukup untuk POC.
Penjelasan Alur Otomatisasi gqlgen
Supaya mudah dipahami, saya buatkan diagram alur inisialisasi library ini menggunakan syntax Mermaid:
flowchart TD A[Mulai di root project] --> B[Eksekusi perintah 'go run github.com/99designs/gqlgen init'] B --> C[Download dependensi utama] C --> D[Generate: - gqlgen.yml - schema.graphqls - graph folder beserta kode boilerplate - server.go] D --> E[Developer modifikasi schema.graphqls, lalu jalanin 'go generate ./...'] E --> F[Auto regenerate GraphQL types & resolvers stub] F --> G[Implementasi business logic]
Diagram di atas menggambarkan bahwa init adalah setup pertama untuk langsung develop, selanjutnya cycle rata-rata tinggal melibatkan modif schema dan run go generate ./...
agar file type & resolver tetap sinkron.
Poin Unik: go run ... init
vs. Install Manual
Biasanya, orang install library via:
go get github.com/99designs/gqlgen
Tapi dengango run github.com/99designs/gqlgen init
,
Anda langsung:
- download package secara temporary tanpa menambah bloated dependencies
- generate struktur project
- minim error manual di step setup
Kelebihannya, Anda bisa melakukan one-liner setup tanpa clutter.
Tips Profesional Pemakaian gqlgen
1. Pisahkan Models dan Resolvers
Daripada logic di *_resolver.go
makin rumit, lebih baik modularisasi ke package tersendiri.
2. Versi Library
Kunci versi di go.mod agar kode stable:
require (
github.com/99designs/gqlgen v0.18.0 // contoh versi stabil
)
3. Integrasi Database
Resolver hasil generate menerima context, sehingga mudah di-inject dependency DB/ORM:
type Resolver struct {
DB *gorm.DB
}
4. Custom Scalar dan Middlewares
Dengan custom scalar (Upload
, DateTime
, dsb) dan directive, Anda bisa setup constraint/authorization seperti pada REST middleware.
FAQ
Q: Bagaimana kalau schema berubah?
A: Cukup update schema.graphqls
, lalu jalankan lagi go generate ./...
– resolver baru otomatis di-stub.
Q: Apakah bisa multi-module?
A: Bisa, edit gqlgen.yml
untuk path graph dan out module sesuai kebutuhan.
Kesimpulan
Inisialisasi gqlgen dengango run github.com/99designs/gqlgen init
adalah fast track untuk setup server GraphQL modern berbasis Go. Proses satu baris ini akan mempersingkat setup tooling, generate kode schema-first, sekaligus menghadirkan playground interaktif yang siap produksi. Langkah selanjutnya cukup memperjelas model, business logic, dan dokumentasi—tooling ini akan menjaga fondasi codebase tetap maintainable.
Jadi, kalau Anda butuh stack API Go dengan GraphQL yang production-ready tanpa ribet, sudah pasti start here!
102 Menyiapkan Proyek gqlgen Pertama Anda
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
