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 seperti address dan birthday walau klien cuma butuh name.
  • 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?

  1. Tidak ada lagi over-fetching dan under-fetching — query bisa dilakukan sesuai kebutuhan persis.
  2. 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).
  3. 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.