103 Inisialisasi gqlgen dengan `go run github.com/99designs/gqlgen init`
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:
1$ mkdir gqlgen-demo && cd gqlgen-demo
2$ go mod init github.com/username/gqlgen-demoLangkah selanjutnya—yang banyak pemula skip karena ada shortcut npm/yarn/gitsubmodule adalah command super powerful ini:
1go run github.com/99designs/gqlgen initOutputnya mirip berikut:
1go: downloading github.com/99designs/gqlgen ...
2Execing "go run github.com/99designs/gqlgen init"
3Generated serverDirektori Anda sekarang punya struktur seperti ini:
1.
2├── go.mod
3├── gqlgen.yml
4├── schema.graphqls
5├── graph/
6│ ├── generated/
7│ ├── model/
8│ ├── resolver.go
9│ └── schema.resolvers.go
10└── server.goMari 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:
1type Todo {
2 id: ID!
3 text: String!
4 done: Boolean!
5}
6
7type Query {
8 todos: [Todo!]!
9}
10type Mutation {
11 createTodo(text: String!): Todo!
12}server.go
Kode entrypoint server akan terlihat seperti ini:
1package main
2
3import (
4 "log"
5 "net/http"
6 "github.com/99designs/gqlgen/graphql/handler"
7 "github.com/99designs/gqlgen/graphql/playground"
8 "gqlgen-demo/graph"
9 "gqlgen-demo/graph/generated"
10)
11
12func main() {
13 srv := handler.NewDefaultServer(generated.NewExecutableSchema(generated.Config{Resolvers: &graph.Resolver{}}))
14 http.Handle("/", playground.Handler("GraphQL playground", "/query"))
15 http.Handle("/query", srv)
16
17 log.Printf("connect to http://localhost:8080/ for GraphQL playground")
18 log.Fatal(http.ListenAndServe(":8080", nil))
19}playground di-attach di root path untuk helper testing API secara interaktif.Simulasi: Memulai Server & Tes
Cukup run:
1go run server.goLalu buka browser ke http://localhost:8080/ , akan keluar interface GraphQL Playground.
Query Simulasi
Menambahkan Todo:
1mutation {
2 createTodo(text: "Belajar gqlgen") {
3 id
4 text
5 done
6 }
7}Mengambil Semua Todo:
1query {
2 todos {
3 id
4 text
5 done
6 }
7}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]
go generate ./... agar file type & resolver tetap sinkron.
Poin Unik: go run ... init vs. Install Manual
Biasanya, orang install library via:
1go get github.com/99designs/gqlgenTapi 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:
1require (
2 github.com/99designs/gqlgen v0.18.0 // contoh versi stabil
3)3. Integrasi Database
Resolver hasil generate menerima context, sehingga mudah di-inject dependency DB/ORM:
1type Resolver struct {
2 DB *gorm.DB
3}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!