Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
16 Jul 2025 · 5 mnt baca ·Artikel 16 / 125
Go

16 Mengenal Query GraphQL dan Format Standarnya

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

title: “16 Mengenal Query GraphQL dan Format Standarnya” date: 2024-06-18 author: “Engineer Dev” tags: [GraphQL, Backend, API, Query Language]

Pendahuluan

Sebagai seorang engineer backend, cukup sering saya menemukan pertanyaan soal GraphQL. Tapi, meski sudah ramai digunakan, pemahaman soal query dan format standarnya kadang masih minim. Artikel ini akan membedah 16 aspek penting dalam mengenal Query GraphQL dan format bakunya, lengkap dengan contoh praktik, simulasi, dan sedikit diagram flow supaya lebih mudah dicerna.


1. Apa Itu GraphQL?

GraphQL adalah query language untuk API yang dibuat oleh Facebook di 2012 dan dirilis secara open-source di 2015. Berbeda dengan REST, GraphQL memungkinkan klien menentukan data apa saja yang mereka butuhkan.

2. Dasar Sintaks Query

Query di GraphQL menggunakan bentuk deklaratif, bukan imperative. Misalnya, untuk mengambil user:

graphql
1{
2  user(id: "42") {
3    id
4    name
5    email
6  }
7}

3. Tipe Query Standar

GraphQL pada dasarnya mengenal tiga tipe request utama:

TipeKeterangan
queryMendapatkan data
mutationMengubah data
subscriptionMendengarkan perubahan data secara real time

Biasanya, query digunakan untuk read-only requests.

4. Struktur Dasar Query

Struktur format query standar:

graphql
1{
2  <entity>(<arguments>) {
3    <fields>
4    <sub-entity> {
5      <fields>
6    }
7  }
8}

Misal:

graphql
1{
2  posts(limit: 2) {
3    id
4    title
5    author {
6      name
7    }
8  }
9}

5. Query dengan Argument

Arguments diterapkan setelah entitas. Contoh dengan filtering dan pagination:

graphql
1{
2  posts(title: "GraphQL", limit: 2, offset: 0) {
3    id
4    title
5  }
6}

6. Alias pada Query

Alias dipakai bila perlu dua data berbeda dari satu field:

graphql
1{
2  firstUser: user(id: "1") {
3    name
4  }
5  secondUser: user(id: "2") {
6    name
7  }
8}

7. Variables pada Query

Agar query lebih dynamic dan secure dari injection, pakai variables:

Query:

graphql
1query getUser($userId: ID!) {
2  user(id: $userId) {
3    id
4    name
5  }
6}

Variables (JSON):

json
1{
2  "userId": "5"
3}

8. Nested Query

GraphQL mendukung nested request, misal user dengan posts mereka:

graphql
 1{
 2  user(id: "5") {
 3    id
 4    name
 5    posts {
 6      title
 7      content
 8    }
 9  }
10}

9. Fragments

Agar reusable, gunakan fragment. Contoh:

graphql
 1fragment userFragment on User {
 2  id
 3  name
 4  email
 5}
 6
 7{
 8  user(id: "10") {
 9    ...userFragment
10    posts {
11      title
12    }
13  }
14}

10. Inline Fragments

Untuk skema dengan union types:

graphql
 1{
 2  search(text: "foo") {
 3    ... on User {
 4      name
 5      email
 6    }
 7    ... on Post {
 8      title
 9      content
10    }
11  }
12}

11. Directives

Directive menambah logika pada query, misal @skip dan @include:

graphql
1query getUser($includeEmail: Boolean!) {
2  user(id: "7") {
3    name
4    email @include(if: $includeEmail)
5  }
6}

12. Handling Error dan Response

Response GraphQL standarnya:

json
 1{
 2  "data": {/* ... */},
 3  "errors": [
 4    {
 5      "message": "User not found",
 6      "locations": [{"line":3, "column":5}],
 7      "path": ["user"]
 8    }
 9  ]
10}

13. Mutasi: Update dan Tambah Data

Mutation untuk update/tambah data:

graphql
1mutation {
2  addPost(title: "Format GraphQL", content: "Penjelasan.") {
3    id
4    title
5  }
6}

14. Subscription

Untuk real-time update:

graphql
1subscription {
2  postAdded {
3    id
4    title
5    author {
6      name
7    }
8  }
9}

15. Standar Format Response

Response GraphQL selalu dalam format berikut:

json
1{
2  "data": {
3    "user": {
4      "id": "5",
5      "name": "Andi"
6    }
7  },
8  "errors": []
9}

Perbedaan dengan REST: GraphQL hanya mempunyai satu endpoint (misal /graphql). Semua query masuk ke sana.

16. Flow Query Execution

Mari lihat bagaimana flow query GraphQL dijalankan pada server. Berikut diagramnya dengan Mermaid:

MERMAID
flowchart TD
    A[Client mengirim Query] --> B[GraphQL Server menerima request]
    B --> C[Parsing Query & Validasi]
    C --> D[Ambil Resolver masing-masing Field]
    D --> E[Eksekusi Resolver (ambil dari DB/Service/Cache)]
    E --> F[Build Response Object]
    F --> G[Kirim Response ke Client]

Simulasi: Lengkap dalam Satu Query

Misal Anda ingin mengambil 2 user berbeda, berikut post mereka dan total comment pada tiap post. Dengan GraphQL, semua bisa sekaligus:

graphql
 1query GetUsersPosts {
 2  user1: user(id: "1") {
 3    name
 4    posts {
 5      title
 6      commentsCount
 7    }
 8  }
 9  user2: user(id: "2") {
10    name
11    posts {
12      title
13      commentsCount
14    }
15  }
16}

Response-nya:

json
 1{
 2  "data": {
 3    "user1": {
 4      "name": "Andi",
 5      "posts": [
 6        {"title": "Intro GraphQL", "commentsCount": 4}
 7      ]
 8    },
 9    "user2": {
10      "name": "Budi",
11      "posts": [
12        {"title": "Belajar REST", "commentsCount": 1}
13      ]
14    }
15  }
16}

Tabel: REST vs GraphQL Query

AspekRESTGraphQL
EndpointBanyak (per resource)1 (biasanya /graphql)
Data yang diterimaFixed (predefined payload)Flexible, sesuai kebutuhan
Overfetching/UnderfetchingSering terjadiTidak, field sesuai permintaan
FilteringSulit dan berbeda di tiap APINative melalui argument

Penutup

Mengenali query dan format standar GraphQL adalah pondasi untuk membangun API modern yang fleksibel dan efisien. Dengan arsitektur GraphQL, klien bebas mengambil data sesuai kebutuhan tanpa overfetching, less endpoint, dan strong typing.

Mulai dari struktur dasar, fragment, variables, mutation, hingga subscription—semuanya diatur dalam satu format standar yang mudah dipelajari namun powerful dalam praktiknya. Untuk engineer backend, memahami format query dan standar response GraphQL adalah investasi penting demi pengalaman API yang lebih solid ke depan.

Happy querying! 🚀


Referensi:


Ingin eksplor lebih dalam?

Komen di bawah untuk tanya tentang implementasi, best practice, dan use-case nyata GraphQL di production!

Artikel Terkait

💬 Komentar