Apa itu GraphQL?
GraphQL = query language untuk API, sekaligus runtime system untuk memenuhi query tersebut dengan data yang dimiliki server.
Masalah pada REST: Over- dan Under-Fetching
Pada REST, untuk mendapatkan data user beserta posts dan followers-nya, klien biasanya perlu melakukan beberapa kali HTTP GET ke endpoint berbeda:
GET /users/<id> → { user: { id, name, address, birthday } }
GET /users/<id>/posts → { posts: [ {id, title, content, comments} ] }
GET /users/<id>/followers → { followers: [ {id, name, address, birthday} ] }
Masalahnya:
- Over-fetching: response
/users/<id>mengembalikan field sepertiaddressdanbirthdaywalau klien cuma butuhname. - Under-fetching: satu endpoint tidak cukup — perlu beberapa round-trip HTTP terpisah untuk mengumpulkan seluruh data yang dibutuhkan satu tampilan (
posts,followers, dst).
Solusi GraphQL: Satu Query, Data Sesuai Kebutuhan
Dengan GraphQL, klien mengirim satu query yang secara eksplisit menyatakan field apa saja yang dibutuhkan, termasuk relasi bersarang (nested):
query {
User(id: "er3tg439frjw") {
name
posts {
title
}
followers(last: 3) {
name
}
}
}Response yang didapat persis sesuai bentuk query — hanya name, judul posts, dan name 3 followers terakhir, dikirim lewat satu HTTP POST ke satu endpoint.
Apa yang Dijanjikan GraphQL?
- Tidak ada lagi over-fetching dan under-fetching — query bisa dilakukan sesuai kebutuhan persis.
- Rapid Product Iterations on Frontend — perubahan kebutuhan data cukup dilakukan di sisi frontend/client saja, tanpa perlu perubahan di server (karena server sudah menyediakan skema graph yang fleksibel di-query sesuai kebutuhan).
- Insightful Analytics on Backend — GraphQL menyediakan informasi tentang data apa saja yang di-request, sehingga backend bisa lebih memahami bagaimana data yang tersedia benar-benar dipakai klien.
Flashcard
flashcards Apa definisi GraphQL? :: Query language untuk API sekaligus runtime system untuk memenuhi query tersebut dengan data yang dimiliki server. Apa itu over-fetching dan under-fetching pada REST yang coba diatasi GraphQL? :: Over-fetching = response berisi field yang tidak dibutuhkan klien; Under-fetching = satu endpoint tidak cukup, perlu banyak request terpisah untuk mengumpulkan semua data yang dibutuhkan. Sebutkan 3 hal yang dijanjikan (promises) GraphQL :: (1) Tidak ada over/under-fetching, (2) Rapid Product Iterations on Frontend (perubahan kebutuhan data cukup di frontend saja), (3) Insightful Analytics on Backend (backend tahu data apa yang benar-benar di-request). Bagaimana GraphQL memungkinkan “Rapid Product Iterations on Frontend”? :: Karena query GraphQL fleksibel menentukan field yang dibutuhkan langsung dari client, perubahan kebutuhan data pada frontend tidak memerlukan perubahan pada server/endpoint.