Apa itu GraphQL? — GraphQL

Pernah panggil REST API dapet response 50 field padahal kamu cuma butuh `name` + `avatar`? Atau sebaliknya, butuh data dari 3 endpoint berbeda (user → posts →…

Pernah panggil REST API dapet response 50 field padahal kamu cuma butuh `name` + `avatar`? Atau sebaliknya, butuh data dari 3 endpoint berbeda (user → posts → comments) sehingga harus 3x request? Ini namanya **over-fetching** + **under-fetching** — masalah klasik REST yang Facebook hadapi tahun 2012 saat scale mobile app. Solusi mereka: **GraphQL** — query language yang membiarkan client deklarasiin "data yang aku butuhkan", server kasih persis itu. Gak lebih, gak kurang.

💡 GraphQL bukan magic. Bagus untuk: aggregating dari banyak data source, mobile (hemat bandwidth), tipikal "complex nested data". Bukan silver bullet: kalau cuma CRUD sederhana, REST lebih simpel + cache-friendly. Pilih sesuai kebutuhan, bukan tren.

Apa itu GraphQL?

GraphQL adalah query language untuk API yang dikembangkan oleh Facebook (2012, open-sourced 2015). Berbeda dari REST, client menentukan data apa yang dibutuhkan — tidak lebih, tidak kurang.

Masalah REST yang GraphQL Selesaikan

// REST: Over-fetching
GET /api/users/123
// Return 20+ fields, padahal cuma butuh name dan avatar

// REST: Under-fetching (multiple roundtrips)
GET /api/users/123          // user info
GET /api/users/123/posts    // user posts
GET /api/posts/456/comments // post comments

// GraphQL: Satu request, data tepat yang dibutuhkan
query {
  user(id: 123) {
    name
    avatar
    posts {
      title
      comments {
        text
      }
    }
  }
}

Konsep Utama

Single Endpoint

// REST: banyak endpoint
GET  /api/users
GET  /api/users/:id
POST /api/users
GET  /api/posts

// GraphQL: satu endpoint
POST /graphql
// Semua query dan mutation dikirim ke sini

Siapa yang Pakai?

🎭 Analogi sehari-hari

REST = menu paket di restoran fast food. Kamu pesan "Paket A" — dapet burger + kentang + minuman, semua sekaligus walau lo gak butuh kentang. GraphQL = buffet self-service. Lo isi piring sendiri sesuai mau: cuma nasi + ayam, tanpa sayur. Hemat tempat di piring + waktu mengonsumsi. Trade: butuh ngerti menu lengkap dulu sebelum bisa milih.

⚠️ Jebakan yang sering ditemui

TL;DR: GraphQL = query language. Client deklarasiin data yang dibutuhkan, server return exactly itu. Solve over/under-fetching REST. Single endpoint `/graphql`. Cocok untuk aggregation, mobile, complex nested data. Bukan replace REST universal — alat berbeda. Awas N+1, caching susah, authorization complex.

Yang akan kamu pelajari