Halo, selamat datang di Ruang Developer Blog. Jika kamu sudah familiar dengan REST API, mungkin kamu pernah mendengar tentang GraphQL. Teknologi ini semakin populer belakangan ini dan banyak digunakan oleh perusahaan-perusahaan besar. Lalu apa sebenarnya GraphQL itu? Dan apa bedanya dengan REST API yang sudah kita kenal? Mari kita bahas.
Apa itu GraphQL?
GraphQL adalah bahasa query untuk API dan runtime untuk menjalankan query tersebut dengan data yang sudah ada. GraphQL dikembangkan oleh Facebook pada tahun 2012 dan dirilis sebagai open source pada tahun 2015. GraphQL memberikan deskripsi lengkap dan mudah dipahami tentang data dalam API kamu, memberikan klien kekuatan untuk meminta persis apa yang mereka butuhkan dan tidak lebih, membuat API lebih mudah untuk berkembang seiring waktu, dan mengaktifkan developer tools yang powerful.
Berbeda dengan REST API yang memiliki banyak endpoint untuk berbagai resource, GraphQL biasanya hanya memiliki satu endpoint. Klien dapat menentukan struktur data yang mereka inginkan, dan server akan mengembalikan data dengan struktur yang persis sama.
Sejarah GraphQL
GraphQL pertama kali dikembangkan secara internal oleh Facebook pada tahun 2012 sebelum dirilis ke publik pada tahun 2015. Facebook membutuhkan solusi yang lebih efisien untuk mengambil data pada aplikasi mobile mereka. Masalah yang mereka hadapi dengan REST API adalah over-fetching (mengambil data yang tidak diperlukan) dan under-fetching (perlu melakukan multiple requests untuk mendapatkan semua data yang diperlukan).
Sejak dirilis sebagai open source, GraphQL telah diadopsi oleh banyak perusahaan besar seperti GitHub, Twitter, Airbnb, dan Shopify. Pada tahun 2018, GraphQL Foundation dibentuk di bawah Linux Foundation untuk mengatur pengembangan GraphQL ke depannya.
Cara Kerja GraphQL
GraphQL bekerja dengan cara yang berbeda dari REST API. Berikut adalah konsep dasar cara kerja GraphQL:
1. Schema
GraphQL menggunakan schema untuk mendefinisikan tipe data dan operasi yang tersedia. Schema ini ditulis menggunakan GraphQL Schema Definition Language (SDL). Contoh schema sederhana:
type User {
id: ID!
name: String!
email: String!
posts: [Post!]!
}
type Post {
id: ID!
title: String!
content: String!
author: User!
}
type Query {
user(id: ID!): User
users: [User!]!
post(id: ID!): Post
}
2. Query
Klien mengirimkan query untuk meminta data. Query ini menentukan struktur data yang diinginkan. Contoh query:
query {
user(id: "1") {
name
email
posts {
title
}
}
}
Response yang dikembalikan akan memiliki struktur yang sama persis dengan query:
{
"data": {
"user": {
"name": "Rizky Kurniawan",
"email": "[email protected]",
"posts": [
{
"title": "Belajar GraphQL"
},
{
"title": "Mengenal REST API"
}
]
}
}
}
3. Mutation
Untuk memodifikasi data (create, update, delete), GraphQL menggunakan mutation. Contoh mutation:
mutation {
createPost(title: "Post Baru", content: "Ini adalah post baru") {
id
title
content
}
}
4. Resolver
Di sisi server, resolver adalah fungsi yang bertanggung jawab untuk mengambil data untuk setiap field dalam query. Resolver menentukan bagaimana data diambil dari database atau sumber data lainnya.
Perbedaan GraphQL dengan REST API
Mari kita bandingkan GraphQL dengan REST API berdasarkan beberapa aspek:
1. Endpoint
REST API:
- Memiliki multiple endpoints untuk berbagai resource
- Contoh:
/users,/users/:id,/posts,/posts/:id
GraphQL:
- Biasanya hanya memiliki satu endpoint (misalnya
/graphql) - Semua operasi dilakukan melalui endpoint yang sama
2. Over-fetching dan Under-fetching
REST API:
- Over-fetching: Sering kali mengambil data yang tidak diperlukan
- Under-fetching: Perlu melakukan multiple requests untuk mendapatkan semua data yang diperlukan
GraphQL:
- Klien dapat meminta persis data yang mereka butuhkan
- Satu request dapat mengambil data dari multiple resources
3. Versioning
REST API:
- Biasanya menggunakan versioning pada URL (misalnya
/v1/users,/v2/users) - Perubahan breaking changes memerlukan versi baru
GraphQL:
- Tidak memerlukan versioning
- Field dapat di-deprecate tanpa menghapusnya
- Evolusi API lebih smooth
4. Documentation
REST API:
- Dokumentasi biasanya dibuat secara terpisah
- Perlu diupdate manual saat ada perubahan
GraphQL:
- Self-documenting melalui schema
- Tools seperti GraphiQL dan GraphQL Playground menyediakan dokumentasi interaktif otomatis
5. Caching
REST API:
- Mudah di-cache menggunakan HTTP caching
- Setiap endpoint dapat di-cache secara terpisah
GraphQL:
- Caching lebih kompleks karena hanya ada satu endpoint
- Memerlukan strategi caching yang lebih sophisticated (misalnya Apollo Client cache)
Contoh Perbandingan Request
Mari kita lihat contoh konkret perbedaan antara REST API dan GraphQL.
Skenario: Kita ingin mengambil data user beserta 3 post terakhir mereka.
Menggunakan REST API:
Request 1 - Ambil data user:
GET /users/1
Response:
{
"id": 1,
"name": "Rizky Kurniawan",
"email": "[email protected]",
"phone": "08123456789",
"address": "Jakarta",
"created_at": "2021-01-01"
}
Request 2 - Ambil posts user:
GET /users/1/posts?limit=3
Response:
[
{
"id": 1,
"title": "Post 1",
"content": "Content 1",
"created_at": "2021-01-02",
"updated_at": "2021-01-02"
},
{
"id": 2,
"title": "Post 2",
"content": "Content 2",
"created_at": "2021-01-03",
"updated_at": "2021-01-03"
}
]
Total: 2 requests, dan kita mendapatkan beberapa data yang tidak kita perlukan (phone, address, created_at, updated_at).
Menggunakan GraphQL:
Request:
query {
user(id: 1) {
name
email
posts(limit: 3) {
title
content
}
}
}
Response:
{
"data": {
"user": {
"name": "Rizky Kurniawan",
"email": "[email protected]",
"posts": [
{
"title": "Post 1",
"content": "Content 1"
},
{
"title": "Post 2",
"content": "Content 2"
}
]
}
}
}
Total: 1 request, dan kita hanya mendapatkan data yang kita perlukan.
Kelebihan GraphQL
- Efisiensi: Klien dapat meminta persis data yang mereka butuhkan, mengurangi over-fetching dan under-fetching
- Fleksibilitas: Mudah untuk menambahkan field baru tanpa mempengaruhi query yang sudah ada
- Strong Typing: Schema yang strongly-typed membantu mencegah error dan memudahkan development
- Single Request: Dapat mengambil data dari multiple resources dalam satu request
- Developer Experience: Tools seperti GraphiQL memberikan pengalaman development yang sangat baik
- Self-Documenting: Schema berfungsi sebagai dokumentasi yang selalu up-to-date
Kekurangan GraphQL
- Kompleksitas: Lebih kompleks untuk dipelajari dan diimplementasikan dibanding REST API
- Caching: Strategi caching lebih rumit karena tidak bisa menggunakan HTTP caching standar
- File Upload: Handling file upload lebih kompleks dibanding REST API
- Query Complexity: Query yang terlalu kompleks dapat menyebabkan performance issues
- Learning Curve: Tim perlu waktu untuk belajar konsep dan best practices GraphQL
- Overhead: Untuk aplikasi sederhana, GraphQL mungkin overkill
Kapan Menggunakan GraphQL?
GraphQL cocok digunakan ketika:
- Aplikasi kamu memiliki banyak relasi data yang kompleks
- Kamu memiliki multiple clients (web, mobile, desktop) dengan kebutuhan data yang berbeda
- Kamu ingin mengurangi jumlah requests dari client
- Kamu membutuhkan fleksibilitas dalam pengambilan data
- Tim kamu sudah familiar dengan GraphQL atau siap untuk belajar
Kapan Menggunakan REST API?
REST API masih cocok digunakan ketika:
- Aplikasi kamu sederhana dengan struktur data yang straightforward
- Kamu membutuhkan HTTP caching yang simple
- Tim kamu sudah sangat familiar dengan REST dan tidak ada kebutuhan mendesak untuk migrasi
- Kamu membutuhkan file upload yang simple
- Kamu ingin implementasi yang lebih cepat dan simple
Kesimpulan
GraphQL dan REST API adalah dua pendekatan yang berbeda untuk membangun API. GraphQL menawarkan fleksibilitas dan efisiensi yang lebih tinggi, terutama untuk aplikasi dengan kebutuhan data yang kompleks. Namun, REST API masih sangat relevan dan cocok untuk banyak use case, terutama untuk aplikasi yang lebih sederhana.
Pilihan antara GraphQL dan REST API tergantung pada kebutuhan proyek kamu, kompleksitas aplikasi, dan kemampuan tim. Tidak ada yang lebih baik secara absolut - keduanya memiliki tempat masing-masing dalam dunia pengembangan aplikasi modern.
Jika kamu tertarik untuk belajar lebih lanjut tentang teknologi backend, jangan lupa baca juga artikel kami tentang Apa Itu REST API dan Apa Itu Microservices Architecture.
