Belajar GraphQL - Arsitektur dan Konsep Fundamental
Episode 2 of 51

Belajar GraphQL - Arsitektur dan Konsep Fundamental

Episode ini membedah cara kerja GraphQL di bawah kap: parsing, validasi, dan eksekusi query, komponen utama seperti SDL dan resolver, tiga operasi dasar query mutation subscription, serta pola arsitektur gateway dan federation.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Di episode 1 kalian sudah tahu kenapa GraphQL ada. Sekarang saatnya memahami bagaimana GraphQL bekerja dari dalam. Episode 2 membedah arsitektur dan konsep fundamental GraphQL secara menyeluruh.

Kita akan menelusuri alur request dari client hingga data dikembalikan: parsing, validation, dan execution. Lalu kita mengenali komponen-komponen utama — schema, type system, resolver, data source, context, dan execution engine. Terakhir, kita membahas tiga operasi dasar dan pola arsitektur yang dipakai di industri, termasuk gateway dan federation.

Selain memahami alur teknisnya, ada satu prinsip yang akan berulang di sepanjang series ini: dalam GraphQL, schema adalah sumber kebenaran. Semua kemampuan GraphQL — validasi, autocomplete, dokumentasi, dan eksekusi — berakar pada schema yang kalian tulis.

Cara Kerja GraphQL (Under the Hood)

Alur Request-Response

Setiap operasi GraphQL melewati tiga tahap di dalam runtime:

  1. Parsing: teks query diubah menjadi Abstract Syntax Tree (AST) oleh parser.
  2. Validation: AST diperiksa terhadap schema — apakah field ada, apakah tipe argumen cocok, apakah operasi terdefinisi.
  3. Execution: untuk setiap field pada query, runtime memanggil resolver yang bersesuaian dan menggabungkan hasilnya menjadi response.
Alur satu request GraphQL
query string -> parse -> validate -> execute -> JSON response

Konsekuensi penting: GraphQL tidak pernah mengeksekusi query yang gagal validasi. Karena itulah schema harus didefinisikan dengan tepat — schema adalah contract sekaligus guard.

Supaya alur ini terasa nyata, bayangkan sebuah restoran. Menu adalah schema, pramusaji adalah parser yang menerjemahkan pesanan, dan dapur adalah resolver yang menyiapkan setiap hidangan. Kalau ada item yang tidak ada di menu, pramusaji langsung menolak pesanan sebelum masuk dapur — persis seperti GraphQL yang menolak query yang tidak sesuai schema.

Kalian bisa melihat sendiri bagaimana sebuah query diubah menjadi AST dengan node -e "const g=require('graphql');console.log(g.parse('{hello}'))". Perhatikan bahwa parser bekerja tanpa perlu tahu isi schema — validasi yang memakai schema, dan itu terjadi setelah parsing selesai.

Execution Strategy

GraphQL mengeksekusi resolver secara paralel bila memungkinkan. Resolver yang saling independen dijalankan bersamaan melalui Promise.all, sementara resolver bertingkat (nested) menunggu parent selesai dulu karena butuh nilai dari parent. Pemahaman ini penting saat mengoptimasi performa di episode 19, dan saat menghadapi masalah N+1 di episode 9.

Komponen Utama GraphQL

Schema Definition Language dan Type System

SDL adalah bahasa untuk mendefinisikan schema. Ini adalah jantung GraphQL:

Schema sederhana dalam SDL
type Query {
  hello: String
  users: [User]
}
 
type User {
  id: ID!
  name: String!
  age: Int
}

Dari schema inilah seluruh type system dibangun. Kita akan membedah SDL dan semua tipe yang tersedia secara mendalam di episode 3.

Resolvers, Data Sources, dan Context

Jika schema menjawab pertanyaan "bentuknya seperti apa", resolver menjawab "datanya dari mana". Setiap field di schema bisa memiliki resolver yang bertugas mengambil data dari data source — database, REST API, atau service lain. Sementara itu, context adalah objek yang dibagikan ke semua resolver dalam satu request, biasanya berisi user yang sedang login, koneksi database, dan data loader. Rincian lengkapnya akan kalian pelajari di episode 6.

Execution Engine

Execution engine adalah runtime yang menyatukan semuanya. Dia menerima query, memvalidasi dengan schema, lalu menelusuri AST dan memanggil resolver field per field. Di ekosistem JavaScript, implementasi referensinya adalah library graphql yang dihasilkan dari spesifikasi. Ketika kalian memakai Apollo Server nanti, kalian sebenarnya menyalakan execution engine di atas HTTP server.

Operasi GraphQL: Query, Mutation, Subscription

GraphQL mendefinisikan tiga tipe operasi, masing-masing masuk ke root type yang berbeda:

  • Query untuk membaca data, masuk ke type Query.
  • Mutation untuk menulis data, masuk ke type Mutation.
  • Subscription untuk menerima data real-time, masuk ke type Subscription.
Tiga root type
type Query {
  getPost(id: ID!): Post
}
 
type Mutation {
  createPost(title: String!): Post
}
 
type Subscription {
  postCreated: Post
}

Aturan penting: operasi query dieksekusi secara paralel, sementara mutation dieksekusi secara serial. Ini menjamin bahwa mutation yang berurutan dalam satu request melihat hasil mutation sebelumnya — kita akan membahasnya di episode 5.

Pilihan antara query, mutation, dan subscription bukan sekadar perbedaan sintaks; ia menegaskan kontrak semantik. Klien dan server sama-sama tahu bahwa mutation mengubah state, sehingga tooling bisa meminta konfirmasi sebelum mengirim, dan caching bisa diperlakukan berbeda. Nuansa semantik ini membuat API GraphQL lebih ekspresif daripada sekadar daftar endpoint.

Arsitektur Patterns

GraphQL Gateway dan Microservices

Ketika aplikasi tumbuh menjadi banyak service, kalian bisa menempatkan GraphQL Gateway di depan service-service tersebut. Gateway meng-agregasi schema dari setiap service menjadi satu schema global, sehingga client tetap berinteraksi dengan satu endpoint. Ada dua pendekatan utama: schema stitching dan federation yang akan dibahas di episode 22.

GraphQL sebagai API Layer

Pola paling sederhana dan paling umum: GraphQL berdiri sebagai API layer di antara client dan data. Client hanya mengenal GraphQL, sementara di belakangnya bisa ada database, REST API legacy, atau third-party service. Pola ini bagus untuk mulai mengadopsi GraphQL tanpa mengubah seluruh arsitektur, dan menjadi fondasi strategi migrasi di episode 47.

Penutup

Inti yang harus dibawa pulang:

  • Setiap request GraphQL melewati tiga tahap: parsing, validation, dan execution.
  • Komponen utama GraphQL adalah SDL, type system, resolvers, data sources, context, dan execution engine.
  • Tiga operasi dasar adalah query, mutation, dan subscription.
  • Query dieksekusi paralel, mutation dieksekusi serial.
  • Pola arsitektur populer: GraphQL sebagai API layer, gateway, dan federation untuk microservices.

Di episode 3 selanjutnya kalian akan mempelajari Schema Definition Language dan Type System — scalar types, object types, input types, enum, interface, union, serta list types dan modifiers. Ini adalah fondasi yang menentukan bentuk seluruh API GraphQL kalian, jadi pastikan kalian fokus!