111 Menambahkan Mutation ke Skema gqlgen
Salah satu kekuatan besar GraphQL terletak pada fleksibilitas dan konsistensinya dalam berinteraksi dengan API. Di dunia backend Go, gqlgen adalah framework andalan yang memudahkan developer membangun skema GraphQL yang type-safe, cepat, dan mudah dirawat. Dalam artikel kali ini, kita akan membedah proses menambahkan Mutation ke skema gqlgen, dengan studi kasus sederhana, kode contoh, serta penjelasan konsep yang mudah dipahami.
Apa itu Mutation dalam GraphQL?
Sebelum terjun menulis kode, ada baiknya kita memahami terlebih dahulu: mutation adalah operasi di GraphQL yang digunakan untuk memodifikasi data (Create, Update, Delete), sebagai lawan dari query yang hanya digunakan untuk membaca data.
Think of mutation as the POST, PUT, PATCH, dan DELETE of REST—tapi dengan kekuatan dan fleksibilitas query GraphQL.
Sekilas tentang gqlgen
gqlgen merupakan library Go yang memanfaatkan kode hasil generate (code-first), memastikan skema (schema) GraphQL-nya selalu sinkron dengan tipe-tipe dalam Go. Dengan sedikit kode boilerplate, kita bisa punya API GraphQL cutting-edge.
Studi Kasus
Misalnya, kita punya aplikasi katalog buku sederhana. Kita ingin bisa menambah buku baru ke dalam katalog melalui mutation GraphQL.
Struktur Project
Kita asumsikan direktori dan berkas seperti berikut (proyek gqlgen standard):
project/
├── go.mod
├── gqlgen.yml
├── graph/
│ ├── model/
│ │ └── models_gen.go
│ ├── schema.graphqls
│ ├── resolver.go
│ └── schema.resolvers.go
└── main.go
1. Mendefinisikan Mutation di Skema GraphQL
Langkah pertama: buka file schema.graphqls
. Di sini kita tambahkan mutation untuk menambah buku.
type Book {
id: ID!
title: String!
author: String!
}
input NewBook {
title: String!
author: String!
}
type Mutation {
addBook(input: NewBook!): Book!
}
Penjelasan:
- Book: Tipe data utama
- NewBook: Input type—data yang diperlukan untuk menambah buku baru
- addBook: Mutation yang akan diimplementasikan
2. Generate Kode Otomatis
Saat skema berubah (misal, ada penambahan mutation di atas), jalankan:
go run github.com/99designs/gqlgen generate
Perintah ini secara otomatis:
- memperbarui
models_gen.go
(struct Go dari tipe GraphQL), - memperbarui interface resolver di
resolver.go
dan mengingatkan kita untuk mengisi fungsinya.
3. Implementasi Resolver Mutation
Sekarang buka schema.resolvers.go
, lalu cari skeleton fungsi AddBook
.
// graph/schema.resolvers.go
func (r *mutationResolver) AddBook(ctx context.Context, input model.NewBook) (*model.Book, error) {
// TODO: implementasi, contoh simpan ke slice in-memory
}
Contoh kode sederhana: simpan data di slice books
yang ada di struct Resolver.
// graph/model/models_gen.go (otomatis di-generate)
// type Book struct { ... }
// type NewBook struct { ... }
// graph/resolver.go
type Resolver struct {
books []*model.Book
}
// graph/schema.resolvers.go
func (r *mutationResolver) AddBook(ctx context.Context, input model.NewBook) (*model.Book, error) {
newBook := &model.Book{
ID: fmt.Sprintf("%d", len(r.books)+1),
Title: input.Title,
Author: input.Author,
}
r.books = append(r.books, newBook)
return newBook, nil
}
4. Simulasi Query GraphQL Mutation
Berikut contoh mutation yang biasa dilakukan dari playground GraphQL atau via curl:
mutation {
addBook(input: { title: "Clean Code", author: "Robert C. Martin" }) {
id
title
author
}
}
Responsnya:
{
"data": {
"addBook": {
"id": "1",
"title": "Clean Code",
"author": "Robert C. Martin"
}
}
}
5. Penjelasan Alur Kerja
Agar lebih jelas, berikut diagram alur mutasi addBook menggunakan Mermaid:
sequenceDiagram participant Client participant Server participant Resolver Client->>Server: send mutation addBook Server->>Resolver: panggil AddBook resolver Resolver-->>Server: return Book baru Server-->>Client: return response Book baru
6. Tabel Ringkasan Proses
Step | File | Penjelasan |
---|---|---|
1. Define | schema.graphqls | Definisikan Mutation dan Input |
2. Generate | go run ... generate | Generate models & resolver |
3. Implement | schema.resolvers.go | Resolver AddBook diisi kode Go |
4. Query | Playground/Postman | Coba mutation addBook |
5. Testing | Otomatis/Manual | Pastikan hasil sesuai harapan |
7. Tips & Best Practice
- Eksplisitkan Tipe Data: Gunakan input type biar skema jelas dan scalable.
- Error Handling: Selalu handle error di resolver.
- Persistence: Untuk production, simpan data ke DB, bukan hanya slice.
- Authorization: Mutation sering kali butuh auth lebih ketat.
- Scalability: Strukturkan codebase dengan modular agar mudah menambah mutation baru.
8. Studi Lanjutan: Middleware & Validasi
Mutation adalah fondasi awal, tapi check validation (misal, judul wajib unik) dan penggunaan middleware seperti cek authentication sangat penting untuk production.
Misal, validasi sederhana di resolver:
for _, b := range r.books {
if b.Title == input.Title && b.Author == input.Author {
return nil, fmt.Errorf("book already exists")
}
}
Kesimpulan
Dengan beberapa langkah sederhana, kita sudah berhasil menambahkan mutation ke skema gqlgen. Gqlgen sangat powerful dan memiliki learning curve yang ramah bagi Go developer. Mutation di GraphQL sangat fleksibel: mau create, update, delete, bisa disesuaikan dengan kebutuhan aplikasi kapan saja hanya dengan modifikasi skema dan resolver.
Jika kamu ingin aplikasi lebih advanced, masukan layer database, otentikasi, dan penanganan error lebih lengkap. Namun core konsep mutation yang kamu pelajari hari ini akan konsisten di berbagai use case.
Selamat bereksperimen! 🚀
Referensi:
Jika kamu suka artikel ini atau ingin ngulik GraphQL + Go lebih lanjut, silakan beri komentar atau share! 👋
Artikel Terhangat
111 Menambahkan Mutation ke Skema gqlgen
10 Oct 2025
108 Menangani Resolver Otomatis dan Manual
10 Oct 2025
106 Menulis Skema `.graphqls` untuk gqlgen
10 Oct 2025
104 Struktur File gqlgen dan Cara Kerjanya
10 Oct 2025

111 Menambahkan Mutation ke Skema gqlgen

108 Menangani Resolver Otomatis dan Manual

106 Menulis Skema `.graphqls` untuk gqlgen
