2 Perbandingan Singkat: GraphQL vs REST API
Perkembangan teknologi web dan mobile membuat kebutuhan akan data yang efisien dan mudah diatur semakin meningkat. Dalam dunia pengembangan API, terdapat dua teknologi populer yang sering kita jumpai: REST API dan GraphQL. Keduanya menawarkan solusi untuk transfer data antara client dan server, namun dengan paradigma yang berbeda.
Sebagai seorang engineer yang sudah beberapa tahun membangun produk digital, saya sering dihadapkan pada diskusi: “Pilih REST API atau GraphQL ya?” Artikel ini akan membahas dua perbandingan utama antara GraphQL dan REST API dengan contoh kode, simulasi, dan ilustrasi tabel serta diagram. Mudah-mudahan dapat membantu Anda memilih mana yang tepat untuk proyek Anda!
1. Cara Meminta & Mendapatkan Data
REST API
REST (Representational State Transfer) mendesain endpoint untuk setiap resource. Misalnya, untuk resource users
, setiap aksi memiliki endpoint berbeda:
GET /users // Mendapatkan data semua user
GET /users/1 // Mendapatkan data user dengan id=1
POST /users // Menambah user baru
PUT /users/1 // Mengupdate user dengan id=1
DELETE /users/1 // Menghapus user dengan id=1
Biasanya, saat client butuh data nested (misal, user dan semua post miliknya), client harus melakukan beberapa kali request:
// Mengambil user
fetch('/users/1')
.then(res => res.json())
.then(user => {
// Mengambil post milik user tsb
fetch(`/users/1/posts`)
.then(res => res.json())
.then(posts => {
// gabungkan post ke objek user
user.posts = posts;
console.log(user);
});
});
GraphQL
GraphQL hanya punya satu endpoint (/graphql
). Client dapat menentukan sendiri data apa saja yang ingin diminta, bahkan dengan nested sekalipun, dalam satu request:
query {
user(id: 1) {
id
name
posts {
id
title
}
}
}
Server akan merespons permintaan dengan struktur data persis seperti yang diminta:
{
"data": {
"user": {
"id": 1,
"name": "Budi",
"posts": [
{ "id": 101, "title": "Belajar REST" },
{ "id": 102, "title": "GraphQL itu Mudah" }
]
}
}
}
Simulasi Diagram Alur
Mari kita lihat perbandingan alur permintaan data dengan REST dan GraphQL menggunakan diagram alur (Mermaid):
sequenceDiagram participant Client participant Server Client->>Server: GET /users/1 Server-->>Client: {id, name} Client->>Server: GET /users/1/posts Server-->>Client: [post1, post2, ...] Note right of Client: Harus dua kali request (REST) Client->>Server: POST /graphql {user dan posts} Server-->>Client: {id, name, posts} Note right of Client: Satu kali request (GraphQL)
Tabel Perbandingan
Fitur | REST API | GraphQL |
---|---|---|
Endpoint | Banyak (tiap resource/aksi) | Satu (/graphql) |
Data response | Semua data di model/endpoint | Hanya field yang diminta |
Nested resource | Perlu beberapa request | Satu query saja |
Over-fetching/Under-fetching data | Sering terjadi | Jarang terjadi |
2. Versi API & Evolusi Skema
REST API
REST API biasanya menggunakan versi pada URL, misalnya /api/v1/users
. Setiap perubahan besar (breaking change) biasanya memerlukan penambahan endpoint versi baru agar client-client lama tetap berjalan.
/api/v1/users
/api/v2/users
Saat ada atribut baru di resource (misal menambah username
), biasanya seluruh client yang tidak perlu field ini akan tetap mendapatkan datanya (over-fetching).
Kelebihan
- Skema API jelas tertulis di dokumentasi.
- Mudah di-cache via HTTP caching (karena endpoint fix).
Kekurangan
- Evolusi API lambat dan harus hati-hati jika menghapus/mengganti atribut.
- Penambahan field bisa bikin response besar (over-fetching).
GraphQL
Di GraphQL, versi endpoint biasanya tidak perlu berubah, karena query yang dikirim client menentukan sendiri field apa saja yang dibutuhkan. Developer backend dapat menambah field baru kapan saja, tanpa mengganggu client lama.
Misalnya, kita menambahkan field username
pada type User
, client lama yang hanya query id
dan name
tidak akan terkena dampaknya sama sekali.
// Query lama (client lama)
query {
user(id: 1) {
id
name
}
}
// Query baru (client baru)
query {
user(id: 1) {
id
name
username
}
}
Kelebihan
- Evolusi schema lebih fleksibel & minim breaking change.
- Tidak perlu versi baru untuk perubahan non-breaking.
- Dokumentasi serta autocompletion langsung dari schema (SDL).
Kekurangan
- Caching HTTP standar (seperti REST) tidak bisa langsung digunakan.
- Potensi query terlalu dalam dan berat jika tidak dibatasi.
Perbandingan Evolusi API
Concern | REST API | GraphQL |
---|---|---|
Perubahan schema | Perlu versi baru (breaking change) | Tambah field tanpa breaking |
Dokumentasi | Manual (Swagger, Postman) | Otomatis dari schema SDL |
Caching | HTTP caching mudah | Perlu custom caching |
Contoh Implementasi Sederhana
Saya akan tunjukkan contoh backend sederhana menggunakan Node.js. Kode berikut memperlihatkan perbedaan antara route REST dan resolvers GraphQL.
REST API (Express.js):
const express = require('express');
const app = express();
const users = [{ id: 1, name: "Budi" }];
const posts = [{ id: 101, title: "Belajar REST", userId: 1 }];
app.get('/users/:id', (req, res) => {
const user = users.find(u => u.id === Number(req.params.id));
res.json(user);
});
app.get('/users/:id/posts', (req, res) => {
const userPosts = posts.filter(p => p.userId === Number(req.params.id));
res.json(userPosts);
});
app.listen(3000);
GraphQL (Apollo Server):
const { ApolloServer, gql } = require('apollo-server');
const users = [{ id: 1, name: "Budi" }];
const posts = [{ id: 101, title: "Belajar REST", userId: 1 }];
const typeDefs = gql`
type User {
id: Int
name: String
posts: [Post]
}
type Post {
id: Int
title: String
}
type Query {
user(id: Int!): User
}
`;
const resolvers = {
Query: {
user: (_, args) => users.find(u => u.id === args.id),
},
User: {
posts: (parent) => posts.filter(p => p.userId === parent.id),
},
};
const server = new ApolloServer({ typeDefs, resolvers });
server.listen({ port: 4000 });
Kapan Menggunakan REST? Kapan GraphQL?
GraphQL cocok jika:
- Produk Anda frontend-heavy (web/mobile apps) dengan kebutuhan data berbeda-beda.
- Sering terjadi over-fetching/under-fetching pada REST API Anda.
- Ingin API evolusi cepat tanpa sering breaking change.
REST lebih tepat jika:
- API Anda sederhana dengan bentuk resource yang sudah pasti.
- Ingin manfaat dari HTTP caching yang sederhana.
- Banyak client legacy yang mengandalkan endpoint tetap.
Kesimpulan
GraphQL dan REST API mempunyai keunggulan serta tantangan masing-masing. Tidak ada satu solusi untuk semua masalah, melainkan tergantung pada kebutuhan aplikasi, tim, dan infrastruktur Anda.
Dari pengalaman pribadi, GraphQL sangat membantu di aplikasi yang kompleks dan sering berubah. Namun REST tetap pilihan aman untuk sistem yang stabil dan mature. Pahami perbedaannya lewat dua perbandingan singkat di atas agar Anda bisa menentukan pilihan terbaik untuk proyek selanjutnya!
Referensi Tambahan:
Happy coding! 🚀
24 Implementasi Bidirectional Streaming RPC
Artikel Terhangat
2 Perbandingan Singkat: GraphQL vs REST API
07 Jul 2025
24 Implementasi Bidirectional Streaming RPC
07 Jul 2025
23 Implementasi Client-side Streaming RPC
07 Jul 2025
22 Implementasi Server-side Streaming RPC
06 Jun 2025
21 Memahami Konsep Streaming pada gRPC
06 Jun 2025
20 Menambahkan Interceptor Unary di Client
06 Jun 2025
19 Menambahkan Interceptor Unary di Server
06 Jun 2025

2 Perbandingan Singkat: GraphQL vs REST API

24 Implementasi Bidirectional Streaming RPC

23 Implementasi Client-side Streaming RPC

22 Implementasi Server-side Streaming RPC

21 Memahami Konsep Streaming pada gRPC

20 Menambahkan Interceptor Unary di Client
