💡 TIPS UNGGULAN
Technology
Intermediate
3 min read

REST API vs GraphQL: Kapan Harus Pakai yang Mana? (dengan Contoh Kode)

Overfetching, underfetching, dan cara GraphQL menyelesaikannya — dibahas lewat contoh implementasi nyata di Laravel, lengkap dengan tabel perbandingan dan kapan sebaiknya memilih yang mana.

AD

admin

24 Agt 2026
3 views

"Pakai REST atau GraphQL?" adalah pertanyaan yang sering muncul di awal proyek, dan sering dijawab berdasarkan tren, bukan kebutuhan sebenarnya. Artikel ini membahas perbedaan keduanya lewat contoh kode nyata, supaya Anda bisa memutuskan berdasarkan kasus pemakaian, bukan sekadar ikut-ikutan.

Masalah yang Coba Diselesaikan GraphQL

Untuk memahami kenapa GraphQL ada, kita perlu lihat dulu dua masalah umum di REST API: overfetching dan underfetching.

Overfetching: Dapat Data Lebih Banyak dari yang Dibutuhkan

GET /api/users/1

// Response — Anda cuma butuh nama & email untuk ditampilkan di navbar,
// tapi server tetap mengirim semua field
{
  "id": 1,
  "name": "Budi Santoso",
  "email": "budi@example.com",
  "address": "Jl. Merdeka No. 10, Jakarta",
  "phone": "081234567890",
  "date_of_birth": "1990-05-14",
  "bio": "...(500 karakter)...",
  "preferences": { ... }
}

Underfetching: Data yang Dibutuhkan Tersebar di Banyak Endpoint

// Untuk menampilkan halaman profil dengan post & komentarnya,
// Anda perlu memanggil 3 endpoint terpisah:
GET /api/users/1          // data user
GET /api/users/1/posts    // daftar post milik user
GET /api/posts/5/comments // komentar di tiap post, dipanggil berulang per post

Semakin kompleks tampilan halaman, semakin banyak round-trip request yang dibutuhkan — masing-masing punya latency-nya sendiri.

Bagaimana GraphQL Menyelesaikan Ini

GraphQL memakai satu endpoint saja, dan client yang menentukan persis field apa yang dibutuhkan dalam satu request:

POST /graphql

query {
  user(id: 1) {
    name
    email
    posts {
      title
      comments {
        author
        text
      }
    }
  }
}

Response yang dikembalikan persis sesuai struktur yang diminta — tidak lebih, tidak kurang:

{
  "data": {
    "user": {
      "name": "Budi Santoso",
      "email": "budi@example.com",
      "posts": [
        {
          "title": "Belajar GraphQL",
          "comments": [
            { "author": "Sari", "text": "Artikelnya bagus!" }
          ]
        }
      ]
    }
  }
}

Contoh Implementasi REST di Laravel

// routes/api.php
Route::get('/users/{id}', [UserController::class, 'show']);
Route::get('/users/{id}/posts', [UserController::class, 'posts']);

// UserController.php
public function show($id)
{
    return User::findOrFail($id);
}

public function posts($id)
{
    return User::findOrFail($id)->posts()->with('comments')->get();
}

Simpel dan mudah dipahami — inilah kekuatan utama REST. Setiap endpoint punya tanggung jawab yang jelas dan bisa diuji secara terpisah dengan mudah.

Contoh Implementasi GraphQL di Laravel (dengan Lighthouse)

// graphql/schema.graphql
type User {
    id: ID!
    name: String!
    email: String!
    posts: [Post!]! @hasMany
}

type Post {
    id: ID!
    title: String!
    comments: [Comment!]! @hasMany
}

type Query {
    user(id: ID! @eq): User @find
}

Dengan skema ini, client bisa meminta kombinasi data apa pun yang mereka butuhkan tanpa Anda perlu membuat endpoint baru untuk setiap kombinasi tampilan.

Perbandingan Langsung

AspekRESTGraphQL
Jumlah endpointBanyak, satu per resourceSatu endpoint untuk semua
Kontrol dataDitentukan serverDitentukan client
Caching HTTPMudah (standar HTTP cache)Butuh setup tambahan
Kurva belajarRendah, sudah familiarLebih tinggi, konsep baru
Cocok untukAPI sederhana–menengah, publikTampilan kompleks, multi-platform

Kapan Pilih REST

  • API yang akan dipakai publik luas atau pihak ketiga — REST lebih universal dan mudah didokumentasikan (Swagger/OpenAPI).
  • Proyek dengan tim kecil yang butuh sesuatu yang cepat dibangun dan dipahami semua orang.
  • Kebutuhan caching di level HTTP (CDN, browser cache) yang jauh lebih matang di ekosistem REST.

Kapan Pilih GraphQL

  • Aplikasi dengan banyak platform (web, iOS, Android) yang masing-masing butuh kombinasi data berbeda dari sumber yang sama.
  • Tampilan dashboard kompleks yang menggabungkan banyak jenis data sekaligus dalam satu layar.
  • Tim frontend yang sering berubah kebutuhan datanya tanpa ingin bergantung pada tim backend membuat endpoint baru tiap kali.

Kesimpulan

Tidak ada yang "lebih unggul" secara mutlak — keduanya menyelesaikan masalah yang berbeda. Untuk sebagian besar proyek company profile, katalog produk, atau sistem internal dengan kompleksitas menengah, REST API tetap pilihan paling efisien untuk dibangun dan dirawat. GraphQL baru benar-benar terasa manfaatnya saat aplikasi Anda sudah cukup kompleks dan multi-platform. Kalau ragu, mulai dari REST — Anda selalu bisa menambahkan GraphQL di kemudian hari untuk kasus spesifik yang membutuhkannya.

Artikel ini bermanfaat? 🚀

Bantu teman-teman developer lainnya dengan membagikan tips ini. Semakin banyak yang terbantu, semakin kuat komunitas tech Indonesia!

Lihat Tips Lainnya

Tips Terkait Yang Mungkin Anda Suka

Konsultasikan Sekarang