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

105 Cara Mengatur `gqlgen.yml` untuk Kustomisasi

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

105 Cara Mengatur gqlgen.yml untuk Kustomisasi

Golang telah lama jadi primadona backend berkat performanya yang kencang dan ekosistem tooling-nya yang terus berkembang. Salah satunya, untuk membuat GraphQL server di Go, kita punya gqlgen — framework yang powerful dan banyak digunakan. Tapi tahukah kamu, kekuatan sebenarnya dari gqlgen justru ada dalam file konfigurasinya, gqlgen.yml?

Pada artikel ini, saya akan membedah 105 cara untuk mengatur gqlgen.yml, mulai dari yang paling esensial sampai hacky tweaks untuk production-ready GraphQL API-mu. Lengkap dengan contoh kode, mini-simulasi, hingga diagram flow dengan Mermaid. Siap? Mari kita eksplorasi gqlgen.yml seperti engineer profesional!


Apa Itu gqlgen.yml?

Sebelum ke 105 customizations, kita refresh dulu apa itu file config ini:

  • letak: biasanya di root project.
  • fungsi: mendefinisikan schema path, tempat resolver, mapping type, hooks, plugins, dan berbagai tweak lain.

Contoh paling dasar gqlgen.yml:

yaml
 1# gqlgen.yml
 2schema:
 3  - graph/schema.graphqls
 4
 5exec:
 6  filename: graph/generated/generated.go
 7  package: generated
 8
 9model:
10  filename: graph/model/models_gen.go
11  package: model
12
13resolver:
14  layout: follow-schema
15  dir: graph/resolver
16  package: resolver

Mengatur schema dan Directory Structure

Cara #1-#5

  1. Schema Path Tunggal
    Langsung tunjuk file master schema:

    yaml
    1schema:
    2  - graph/schema.graphqls
  2. Multiple Schema Files
    Pisah per modul/microservice:

    yaml
    1schema:
    2  - graph/user/schema.graphqls
    3  - graph/product/schema.graphqls
  3. Globbing Schema Files
    Otomasi load seluruh schema di folder:

    yaml
    1schema:
    2  - "graph/**/*.graphqls"
  4. Schema dengan Preprocessing
    Bisa diubah manual sebelum generate.

  5. Versioning Schema
    Pisahkan per versi jika API-mu versioned.


Custom File dan Package Output

Cara #6-#15

SettingFungsiContoh
execFile generated Goexec: {filename: graph/generated/generated.go}
modelFile model type Gomodel: {filename: graph/model/models_gen.go}
resolverResolver directoryresolver: {dir: graph/resolver}

Kamu juga bisa custom package name agar lebih idiomatic.

yaml
1exec:
2  filename: internal/graph/gen.go
3  package: graphgen
4
5model:
6  filename: internal/graph/model.go
7  package: graphmodel

Type Mapping (models dan bindings)

Cara #16-#25

Ini bagian paling powerful!

Mapping Tipe GraphQL ke Struct Go

Misal, schema:

graphql
1scalar DateTime
2type User {
3  id: ID!
4  createdAt: DateTime!
5}

Mappingnya:

yaml
1models:
2  DateTime:
3    model:
4      - github.com/yourapp/pkg/datetime.Time

Beberapa opsi mapping:

  • model: ganti type yang digunakan
  • bind: map ke type yang diimport saat scan input
  • field: mapping per field

Opsional: Kamu juga bisa set kustom untuk array/matrix type.


Custom Unmarshal/Marshal untuk Scalar

Cara #26-#30

Default scalar hanya diproses otomatis. Untuk scalar custom, wajib buat Marshaller-Unmarshaller.

Misal mapping ke time.Time:

yaml
1models:
2  DateTime:
3    model: time.Time
4    marshal: github.com/yourapp/pkg/datetime.MarshalDateTime
5    unmarshal: github.com/yourapp/pkg/datetime.UnmarshalDateTime

Menentukan Resolver Layouts

Cara #31-#35

yaml
1resolver:
2  layout: follow-schema
3  dir: graph/resolver
4  package: resolver

Opsi layout:

  • follow-schema: Per-type per-file (paling populer)
  • single-file: Semua resolver dalam satu file
  • custom: Path bebas yang kamu tentukan sendiri

Memakai Plugin Custom

Cara #36-#40

gqlgen mendukung plugin third-party untuk enhance kode yang dihasilkan:
Misalnya, plugin untuk open-tracing, error-wrapping, atau codegen yang kompatibel GraphQL Federation.

yaml
1plugins:
2  - name: github.com/99designs/gqlgen/plugin/federation

Scalar dan Directive Hooks

Cara #41-#55

Tambahkan hooks custom saat proses parsing:

yaml
1directives:
2  upper:
3    implementation: github.com/yourapp/graph/directives.UpperCase
4    location: FIELD_DEFINITION

Custom scalar hooks juga bisa tambahkan validator atau sanitizer ke custom scalar.


Tag Struct kustom (JSON/DB/CustomTag)

Cara #56-#65

Kadang, field pada GraphQL butuh tag struct berbeda di Go.
Tambahkan mapping tag lewat config:

yaml
1# Membuat custom tag JSON
2models:
3  User:
4    fields:
5      email:
6        tag: json:"email,omitempty" db:"email_column"

Tag Yang Sama untuk Semua Model

Cara #66-#69

yaml
1struct_tag: json
atau:
yaml
1struct_tag: json,db


Generate Interfaces

Cara #70-#75

Untuk schema Polymorphic, gunakan mapping ke Go interface:

yaml
1models:
2  Animal:
3    model: github.com/yourapp/graph/model.Animal

Opsi Kustom Null

Cara #76-#80

Default gqlgen pakai pointer *T untuk nullables. Bisa diubah ke null.String, dsb:

yaml
1models:
2  String:
3    model: github.com/guregu/null.String

Field Mapping ke Field Berbeda

Cara #81-#90

Misal schema:

graphql
1type Product {
2  id: ID!
3  productName: String!
4}

Struct Go berbeda nama field:

go
1type Product struct {
2  ID          string
3  NameOfProduct string
4}

Konfigurasikan mapping-nya:

yaml
1models:
2  Product:
3    fields:
4      productName:
5        resolver: true
6        goField: NameOfProduct

Disable/Enable Output Artifacts

Cara #91-#95

Atur artifact apa saja yang di-generate lewat flag/konfigurasi file:

yaml
1omit_getters: true
2omit_resolver_interface: false

Enable Resolver Methods Only

Cara #96-#99

Mengurangi kode, generate hanya bagian resolver:

yaml
1resolver:
2  only: true

Testing: Generate Mock

Cara #100-#102

Gqlgen bisa generate mock untuk resolver, sangat handy saat unit test!

yaml
1generate:
2  mocks: true

Environment dan Path Relatif

Cara #103-#104

Bisa pakai env var (misal saat CI/CD):

yaml
1schema:
2  - ${SCHEMA_PATH}

Watch Mode Auto Reload

Cara #105

Aktifkan live watch untuk ui atau service development:

bash
1gqlgen generate --watch

Simulasi — Pipeline Codegen

Di bawah, contoh flow codegen dengan diagram Mermaid:

MERMAID
flowchart TD
    A[Update gqlgen.yml]
    B[Schema diubah]
    C[Run gqlgen generate]
    D[Generated Go Code Update]
    A-->C
    B-->C
    C-->D

Rangkuman

Seperti yang kamu bisa lihat, gqlgen.yml bukan cuma file template biasa.
Dari mapping custom type, scalar, plugins, rapid testing, hingga custom kode layout, semuanya dibikin flexible.

Dengan 105 metode di atas, kamu bisa kustomisasi GraphQL API-mu sesuai kebutuhan perusahaan, skala, bahkan cara kerja timmu sendiri. Jangan ragu eksperimen — dan eksplorasi lebih lanjut lewat dokumentasi.
Jika ada tips kustomisasi yang belum saya bahas, share di kolom komentar ya!


Menulis config dengan benar = menghasilkan kode backend yang bersih, terstruktur, dan hemat waktu.
#HappyCoding! 🚀


Referensi

Artikel Terkait

💬 Komentar