tutorial

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 endpointSingle endpoint
Over/Under-fetching dataFetch sesuai kebutuhan
Manual handler & routingOtomatis via schema
Dokumentasi sering manualAuto 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/FolderFungsi
gqlgen.ymlKonfigurasi utama, path, package, hooks
schema.graphqlsTempat 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.goBootstrap 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 dengan
go 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 dengan
go 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!

comments powered by Disqus