# GraphQL Adalah: Pengertian, Cara Kerja, dan Contohnya

> GraphQL adalah bahasa query untuk API yang mengambil data persis sesuai kebutuhan. Pahami schema, query, mutation, bedanya dengan REST, dan kapan dipakai.

**URL:** https://www.ciptadusa.com/blog/graphql-adalah  
**Type:** blog  
**Author:** PT Cipta Dua Saudara  
**Category:** Teknologi  
**Published:** 2026-11-12  
**Cover:** https://www.ciptadusa.com/media/uploads/blog/2026-11/1794450155014-graphql-adalah-20261112.webp  

## Article

GraphQL adalah bahasa query open source untuk API sekaligus runtime di sisi server. Situs resmi GraphQL menjelaskan bahwa GraphQL memakai schema dengan tipe yang ketat untuk mendefinisikan hubungan antar data, sehingga API lebih fleksibel dan bisa diprediksi, dan GraphQL tidak terikat pada database atau mesin penyimpanan tertentu ([sumber](https://graphql.org/)).

Ciri yang paling terasa bagi developer: aplikasi meminta persis data yang dibutuhkan, tidak lebih dan tidak kurang. Artikel ini membahas pengertian GraphQL, sejarah singkatnya, cara kerjanya, jenis operasi, perbedaannya dengan REST API, contoh query, hal yang perlu diperhatikan soal keamanan dan caching, serta kapan bisnis sebaiknya memakainya.

## Pengertian GraphQL

Situs resmi GraphQL menyebut tiga kemampuan utamanya ([sumber](https://graphql.org/)):

- **Minta yang dibutuhkan, dapat persis itu.** Aplikasi mengirim query dan menerima data yang diminta saja, tanpa over-fetching (data berlebih) atau under-fetching (data kurang).
- **Banyak data dalam satu request.** GraphQL mengikuti hubungan antar data, sehingga aplikasi tidak perlu memanggil banyak URL seperti pada REST API biasa.
- **Berkembang tanpa versi.** Field dan tipe baru bisa ditambahkan tanpa mengganggu query yang sudah ada, dan field lama bisa ditandai deprecated.

Kalau [API](/blog/api-adalah) diibaratkan pelayan restoran, REST memberi menu paket yang isinya sudah ditentukan. GraphQL membiarkan pelanggan menyebut sendiri isi piringnya, selama ada di daftar menu (schema).

### Sejarah Singkat GraphQL

Aplikasi mobile Facebook sudah memakai GraphQL sejak 2012. Spesifikasi GraphQL dibuka sebagai open source pada 2015, dan kini didukung GraphQL Foundation yang sejak 2018 dinaungi Linux Foundation ([sumber](https://graphql.org/)). GraphQL Foundation menjadi rumah netral untuk merek dagang GraphQL dan mendukung perkembangan spesifikasi serta implementasi rujukannya ([sumber](https://graphql.org/foundation/)).

## Komponen Utama GraphQL

| Komponen | Penjelasan |
|---|---|
| Schema | Setiap layanan GraphQL mendefinisikan sekumpulan tipe yang menggambarkan seluruh data yang bisa di-query. Setiap request divalidasi dan dijalankan terhadap schema ini ([sumber](https://graphql.org/learn/schema/)) |
| Tipe (type) | Bentuk data, misalnya tipe `Produk` dengan field `nama` dan `harga`. Tipe yang ketat membuat respons bisa diprediksi ([sumber](https://graphql.org/)) |
| Query | Operasi untuk membaca data. Pada dasarnya, GraphQL adalah tentang meminta field tertentu pada objek ([sumber](https://graphql.org/learn/queries/)) |
| Mutation | Operasi untuk mengubah data di server ([sumber](https://graphql.org/learn/mutations/)) |
| Subscription | Operasi untuk menerima pembaruan real-time lewat request yang berumur panjang ([sumber](https://graphql.org/learn/subscriptions/)) |
| Resolver | Fungsi yang ditulis developer server untuk setiap field. Saat sebuah field dijalankan, resolver-nya dipanggil untuk menghasilkan nilai ([sumber](https://graphql.org/learn/execution/)) |

## Cara Kerja GraphQL

Alur sebuah request GraphQL umumnya seperti ini:

1. Tim backend menulis schema yang mendefinisikan tipe data dan operasi yang tersedia.
2. Aplikasi (web atau mobile) menyusun query berisi field yang dibutuhkan saja.
3. Query dikirim ke satu endpoint. Dokumentasi GraphQL menyebut layanan GraphQL biasanya memakai satu URL, umumnya `/graphql`, dan request dikirim dengan metode HTTP POST, meskipun operasi query juga boleh memakai GET ([sumber](https://graphql.org/learn/serving-over-http/)).
4. Server memvalidasi query terhadap schema ([sumber](https://graphql.org/learn/schema/)).
5. Server menjalankan resolver untuk setiap field yang diminta, misalnya mengambil data dari database atau memanggil layanan lain ([sumber](https://graphql.org/learn/execution/)).
6. Server mengembalikan hasil dalam bentuk yang sama dengan bentuk query yang diminta ([sumber](https://graphql.org/learn/execution/)).

Karena hanya ada satu endpoint, autentikasi dipasang sebelum GraphQL diproses. Dokumentasi GraphQL menyarankan GraphQL ditempatkan setelah semua middleware autentikasi, agar sesi dan data pengguna tersedia saat request dijalankan ([sumber](https://graphql.org/learn/serving-over-http/)).

## Contoh Query GraphQL

Misalnya aplikasi toko online ingin menampilkan nama pelanggan dan tiga pesanan terakhirnya. Contoh berikut adalah ilustrasi CDS, dengan nama tipe dan field yang dibuat untuk contoh ini:

```graphql
query {
  pelanggan(id: "C-1001") {
    nama
    pesanan(terakhir: 3) {
      nomor
      total
      status
    }
  }
}
```

Hasilnya akan berbentuk sama dengan query di atas: objek `pelanggan` berisi `nama` dan daftar `pesanan`, tanpa field lain seperti alamat atau nomor telepon yang tidak diminta. Pada REST API, data yang sama sering butuh dua request, misalnya `/pelanggan/C-1001` lalu `/pelanggan/C-1001/pesanan`, dan masing-masing bisa mengirim field yang tidak dipakai.

### Variables dan Fragments

Contoh di atas menulis ID pelanggan langsung di dalam query. Dokumentasi GraphQL mengingatkan bahwa di kebanyakan aplikasi, argumen seperti ini dinamis, misalnya berasal dari kolom pencarian atau filter, dan tidak baik dimasukkan langsung ke string query karena kode klien harus mengubah teks query saat runtime ([sumber](https://graphql.org/learn/queries/)). Solusinya adalah variables: query ditulis sekali dengan nama variabel, lalu nilainya dikirim terpisah. Contoh ilustrasi CDS:

```graphql
query PesananPelanggan($id: ID!, $jumlah: Int) {
  pelanggan(id: $id) {
    nama
    pesanan(terakhir: $jumlah) {
      nomor
      total
    }
  }
}
```

Nilai variabelnya dikirim sebagai JSON terpisah, misalnya `{"id": "C-1001", "jumlah": 3}`.

Untuk sekumpulan field yang dipakai berulang, GraphQL menyediakan fragments. Fragments memungkinkan Anda menyusun sekumpulan field lalu menyertakannya di query mana pun yang membutuhkan, dan sering dipakai untuk memecah kebutuhan data aplikasi yang rumit menjadi bagian kecil, terutama saat menggabungkan banyak komponen UI ([sumber](https://graphql.org/learn/queries/)).

### Contoh Mutation

Untuk mengubah data, dipakai mutation. Contoh ilustrasi CDS:

```graphql
mutation {
  ubahStatusPesanan(nomor: "INV-2026-0042", status: DIKIRIM) {
    nomor
    status
  }
}
```

Spesifikasi GraphQL menyatakan bahwa resolusi field selain field mutation di level teratas harus bebas efek samping dan idempoten. Artinya, hanya field mutation di level teratas yang boleh mengubah data ([sumber](https://graphql.org/learn/mutations/)).

## GraphQL vs REST API

| Aspek | REST API | GraphQL |
|---|---|---|
| Endpoint | Banyak URL, satu per resource | Biasanya satu endpoint, umumnya `/graphql` ([sumber](https://graphql.org/learn/serving-over-http/)) |
| Bentuk data | Ditentukan server per endpoint | Ditentukan klien lewat query ([sumber](https://graphql.org/)) |
| Mengambil data terkait | Sering butuh beberapa request | Bisa dalam satu request ([sumber](https://graphql.org/)) |
| Versi API | Umumnya memakai versi, misalnya `/v1`, `/v2` | Field baru ditambahkan tanpa versi, field lama ditandai deprecated ([sumber](https://graphql.org/)) |
| Caching HTTP | URL menjadi identitas unik resource, cocok untuk cache HTTP | Tidak ada URL unik per objek, jadi butuh ID global untuk caching ([sumber](https://graphql.org/learn/caching/)) |

Penjelasan REST di tabel ini adalah ringkasan umum dari tim CDS. Untuk dasar REST dan metode HTTP, lihat artikel [API adalah](/blog/api-adalah).

GraphQL bukan pengganti REST untuk semua kasus. Banyak sistem memakai keduanya: REST untuk integrasi sederhana atau [webhook](/blog/webhook-adalah), GraphQL untuk aplikasi yang butuh data bertingkat dari banyak sumber.

## Keamanan GraphQL yang Perlu Diperhatikan

Karena klien bebas menyusun query, server harus membatasi query yang terlalu berat. Dokumentasi resmi GraphQL membahas beberapa pengaman ([sumber](https://graphql.org/learn/security/)):

- **Batasi kedalaman query.** Banyak implementasi GraphQL menyediakan pengaturan kedalaman maksimum, dan query yang melebihi batas ditolak sebelum dijalankan. Karena list yang bersarang bisa membuat jumlah data naik secara eksponensial, disarankan batas yang lebih kecil untuk list bersarang.
- **Batasi jumlah field dan alias.** Satu query bisa meminta field yang sama berkali-kali dengan alias berbeda, jadi jumlah field di level teratas dan alias juga perlu dibatasi.
- **Rate limiting dan analisis kompleksitas query.** Dipakai untuk membatasi beban per klien.
- **Introspection di produksi.** Dokumentasi GraphQL menyebut menonaktifkan introspection di luar lingkungan development hanya bentuk "security through obscurity" dan tidak cukup sendirian. Perlindungan yang lebih lengkap memakai trusted documents dan otorisasi.

Otorisasi tetap harus diperiksa di setiap resolver atau di lapisan bisnis, bukan hanya di pintu masuk. Ini panduan internal CDS, sejalan dengan praktik keamanan [backend](/blog/backend-adalah) pada umumnya.

## Caching dan Performa

Pada API berbasis endpoint, klien bisa memakai cache HTTP karena URL menjadi identitas unik sebuah resource. Di GraphQL tidak ada identitas seperti URL untuk setiap objek, sehingga dokumentasi GraphQL menyarankan API menyediakan ID unik global sebagai syarat untuk beberapa jenis caching ([sumber](https://graphql.org/learn/caching/)).

Dari pengalaman tim CDS, masalah performa GraphQL yang paling sering muncul adalah resolver yang memanggil database berulang kali untuk setiap item dalam list (masalah N+1). Solusinya biasanya dengan batching, misalnya mengumpulkan semua ID lalu mengambilnya dalam satu query database.

## Kapan Bisnis Perlu GraphQL?

Panduan internal CDS untuk menilai apakah GraphQL cocok:

1. Ada beberapa aplikasi klien (web, Android, iOS, dashboard admin) yang butuh data sama tetapi bentuknya berbeda-beda.
2. Halaman aplikasi butuh data bertingkat dari banyak tabel atau layanan, dan saat ini harus memanggil banyak endpoint REST.
3. Koneksi pengguna sering lambat, misalnya aplikasi mobile di daerah dengan sinyal terbatas, sehingga ukuran respons yang lebih kecil terasa manfaatnya.
4. Sistem sudah memakai [microservices](/blog/microservices-adalah) dan butuh satu pintu masuk yang menyatukan data dari beberapa layanan.
5. Tim siap mengelola schema, batas query, dan pemantauan performa resolver.

Jika API hanya dipakai satu aplikasi dengan kebutuhan data yang sederhana, REST API biasanya lebih cepat dibangun dan lebih mudah di-cache.

## FAQ Seputar GraphQL

### GraphQL adalah apa dalam bahasa sederhana?

GraphQL adalah cara meminta data dari API di mana aplikasi menyebut sendiri field yang dibutuhkan, lalu server mengirim persis data itu ([sumber](https://graphql.org/)).

### Siapa yang membuat GraphQL?

GraphQL dipakai di aplikasi mobile Facebook sejak 2012, spesifikasinya dibuka sebagai open source pada 2015, dan sekarang dinaungi GraphQL Foundation di bawah Linux Foundation sejak 2018 ([sumber](https://graphql.org/)).

### Apakah GraphQL pengganti REST API?

Tidak selalu. GraphQL unggul untuk data bertingkat dan banyak jenis klien, sedangkan REST lebih sederhana untuk integrasi kecil dan lebih mudah memakai cache HTTP ([sumber](https://graphql.org/learn/caching/)).

### Apakah GraphQL butuh database khusus?

Tidak. GraphQL tidak terikat pada database atau mesin penyimpanan tertentu dan bisa bekerja dengan kode dan data yang sudah ada ([sumber](https://graphql.org/)).

### Apa itu resolver di GraphQL?

Resolver adalah fungsi di server untuk setiap field. Saat sebuah field diminta, resolver-nya dipanggil untuk mengambil nilainya ([sumber](https://graphql.org/learn/execution/)).

### Apa perbedaan query, mutation, dan subscription?

Query untuk membaca data, mutation untuk mengubah data, dan subscription untuk menerima pembaruan real-time ([sumber](https://graphql.org/learn/queries/)).

## Butuh Bantuan Merancang API untuk Aplikasi Anda?

Tim CDS membangun backend dan API, baik REST maupun GraphQL, untuk aplikasi web, mobile, dan dashboard internal lewat [jasa pembuatan software custom](/services/software). Jika Anda sedang menimbang apakah API yang sudah berjalan perlu dirombak, mulai dari [konsultasi IT](/services/consulting). Anda juga bisa melihat [karya CDS](/works) untuk proyek yang sudah kami kerjakan.


---

*Markdown version of https://www.ciptadusa.com/blog/graphql-adalah — generated for AI agents and LLM crawlers.*
