Article

GraphQL with Quarkus: Membangun API Modern

5 min Read

Pernahkah kamu merasa menjadi ‘kurir data’ yang kewalahan saat mengelola API? Di satu sisi, tim frontend mengeluh karena API memberikan data terlalu banyak (over-fetching), namun di sisi lain, mereka harus memanggil banyak endpoint sekaligus untuk satu halaman saja.

Dalam pengembangan aplikasi modern, efisiensi dan fleksibilitas API memang telah menjadi kebutuhan utama. Kita tahu bahwa REST API yang selama ini populer sering menghadapi masalah over-fetching dan under-fetching. Sebagai solusinya, GraphQL hadir dengan pendekatan query yang lebih presisi, memberikan kendali penuh kepada konsumen data.

Namun, bagaimana cara mengimplementasikannya dengan cepat? Artikel ini akan membahas langkah mudah membangun GraphQL API menggunakan Quarkus yang bisa memangkas kerumitan konfigurasi sehingga kamu bisa fokus memberikan nilai terbaik bagi pengguna aplikasi.

Mengenal GraphQL: Solusi Cerdas untuk API Modern

Singkatnya, GraphQL adalah bahasa ‘negosiasi’ data. Ia bertindak sebagai query language sekaligus runtime yang memastikan user mendapatkan data sesuai permintaan mereka. Bayangkan GraphQL sebagai asisten pribadi yang sangat efisien; ketika kamu meminta data tertentu, ia akan memberikan hasil yang tepat sasaran, membuat pengembangan API menjadi jauh lebih fleksibel dan hemat resource.

Belajar dari Masalah Facebook

Perjalanan GraphQL dimulai pada tahun 2012. Saat itu, tim Facebook sedang berjuang mengoptimalkan aplikasi mobile mereka yang terasa berat. Mengapa mereka tidak menggunakan REST API? Karena REST memiliki struktur respons yang kaku (fixed), yang sering kali memicu dua masalah utama:

  1. Over-fetching (Kelebihan Data): Terjadi saat kamu hanya butuh nama dan umur user, tapi API justru mengirimkan alamat, hobi, hingga riwayat transaksi.
  2. Under-fetching (Kekurangan Data): Terjadi saat kamu butuh nama dan hobi, tapi data tersebut ada di dua pintu (endpoint) berbeda. Akibatnya, aplikasi harus melakukan kerja dua kali untuk mendapatkan informasi yang simpel.

Sadar bahwa masalah ini juga dialami banyak developer di seluruh dunia, Facebook akhirnya merilis GraphQL secara open source pada tahun 2015. Sejak saat itu, standar pengembangan API pun berubah menjadi lebih personal dan efisien.

GraphQL: Solusi API Modern

GraphQL bukan sekadar alternatif REST API, melainkan evolusi cara aplikasi berkomunikasi dengan data. Dengan pendekatan berbasis query, Anda dapat:

  • Meminta data sesuai kebutuhan tanpa kelebihan (menghindari over-fetching) dan menggabungkan beberapa data dalam satu request (menghindari under-fetching).


Gambar 1


Gambar 2

Jika kita perhatikan perbedaan antara Gambar 1 dan 2, terlihat jelas bagaimana GraphQL membantu kita bekerja lebih efisien. Pada Gambar 1, kita melihat masalah umum dalam penggunaan API konvensional, yaitu over-fetching, di mana kita menerima terlalu banyak data yang tidak diperlukan. Sebaliknya, pada Gambar 2, kita cukup meminta data yang memang dibutuhkan (seperti title dan director), sehingga prosesnya jauh lebih ringkas.

Kenapa Menggunakan GraphQL?

  • Bebas Data Berlebih (Over-fetching): Tidak seperti API biasa yang sering mengirimkan data (Gambar 1), dengan GraphQL Anda hanya mendapatkan apa yang Anda minta, misalnya hanya title dan director saja (Gambar 2).
  • Dokumentasi yang Jelas: Developer tidak perlu menebak-nebak struktur data karena skema API tersusun rapi dan bisa diakses langsung di /graphql/schema.graphql.
  • Fleksibilitas Operasi: Mendukung penuh operasi CRUD (tambah, edit, hapus) melalui Mutation.
  • Update Real-Time: Dengan fitur Subscription lewat WebSocket, pengguna bisa menerima pembaruan data secara langsung saat itu juga tanpa perlu memuat ulang halaman.

Quarkus Sebagai Framework GraphQL

Quarkus adalah framework Java modern yang dirancang untuk cloud-native development berbasis container sehingga sangat cocok dalam pengembangan aplikasi digital dan aplikasi microservices. Dalam konteks GraphQL, Quarkus memberikan sejumlah keuntungan:

  • Startup Cepat & Memory Rendah
    Quarkus dioptimalkan untuk GraalVM dan HotSpot, sehingga aplikasi GraphQL dapat berjalan dengan cepat dan hemat resource. Cocok untuk microservices.
  • Integrasi dengan SmallRye GraphQL
    Quarkus menyediakan extension quarkus-smallrye-graphql yang memudahkan developer membangun GraphQL API tanpa konfigurasi rumit. Dengan extension SmallRye, developer cukup menambahkan anotasi @GraphQLApi, @Query, @Mutation, dan @Subscription pada source code.
  • Developer Experience

Quarkus memiliki mode live coding (quarkus dev) yang memungkinkan perubahan kode langsung terlihat tanpa restart penuh. Hal ini mempercepat iterasi saat membangun GraphQL schema.

  • GraphQL UI Built-in

Quarkus menyertakan GraphiQL UI secara default di mode dev/test. Developer bisa langsung mencoba query, mutation, dan subscription melalui antarmuka web interaktif.

  • Ekstensi & Ekosistem Lengkap

Quarkus mendukung integrasi dengan berbagai teknologi lain (Hibernate, RESTEasy, Kafka, dll). Sehingga GraphQL API dapat dengan mudah dikombinasikan dengan database, messaging, atau service lain.

GraphQL UI: Visualisasi API

Quarkus menyediakan GraphQL UI (GraphiQL) secara built-in ketika aplikasi dijalankan dalam mode dev atau test. GraphQL UI adalah antarmuka berbasis web yang memungkinkan developer:

  • Menulis query, mutation, dan subscription secara interaktif.
  • Melihat hasil respons API secara langsung dalam format JSON.
  • Mengeksplorasi schema GraphQL yang sudah dibuat, termasuk tipe data, field, dan relasi antar entitas.

Prerequisite Tools

Berikut adalah tools yang dibutuhkan untuk membuat GraphQL dengan Quarkus:

  1. Sebuah IDE *ex: Visual Studio Code
  2. JDK 17++
  3. Apache Maven
  4. Quarkus CLI

Menyiapkan dan Menjalankan Aplikasi GraphQL API

Pengembangan GraphQL sederhana dengan bantuan extension dari Quarkus SmallRye. Berikut langkah-langkah sederhana untuk mulai mengembangkan aplikasi GraphQL menggunakan Quarkus.

  1. Inisiasi project Quarkus dengan dependency yang sesuai:
  2. Membuat file entitas.
  3. Membangun service yang dibutuhkan. Berikut contoh service untuk menyediakan query dan mutasi pada GraphQL.
    public List<Film> getAllFilms() { return films; }public Film getFilm(int id) { return films.get(id); }public List<Hero> getHeroesByFilm(Film film) { return heroes.stream()

    .filter(hero -> hero.getEpisodeIds().contains(film.getEpisodeID()))

    .collect(Collectors.toList());

    }

    public void addHero(Hero hero) { heroes.add(hero); }

    public Hero deleteHero(int id) { return heroes.remove(id); }

    public List<Hero> getHeroesBySurname(String surname) { return heroes.stream()

    .filter(hero -> hero.getSurname().equals(surname))

    .collect(Collectors.toList());

    }

  4. Membuat kelas yang berisi GraphQL API dengan anotasi @GraphQLApi.
    @GraphQLApipublic class FilmResource {@Inject

    GalaxyService service;

    @Query(“allFilms”)

    @Description(“Get all films from your universe.”)

    public List<Film> getAllFilms() { return service.getAllFilms(); }

    }

  1. Aplikasi GraphQL sudah siap. Jalankan Quarkus kita dengan command :
    Command ini akan membangun dan menyiapkan runtime untuk aplikasi serta mengaktifkan fitur live coding. GraphQL UI dapat dilihat dari http://localhost:8080/q/graphql-ui. 
  2. Tambahkan mutation pada GraphQL API untuk melakukan penambahan dan pengurangan.
    Dengan fitur live coding dari Quarkus, perubahan fitur bisa langsung dites tanpa harus melakukan  atau deploy ulang.


  3. Tambahkan subscription menggunakan anotasi @Subscription.

Kesimpulan

Membangun aplikasi di era modern bukan lagi soal “yang penting jalan”, tapi soal seberapa cepat kita bisa beradaptasi dan seberapa efisien sumber daya yang kita gunakan. Perpaduan antara fleksibilitas GraphQL dan kecepatan Quarkus adalah jawaban nyata bagi tantangan pengembangan aplikasi saat ini.

Jadikan proses coding lebih produktif dan menyenangkan dengan teknologi yang tepat. Mengapa bertahan dengan metode lama jika ada jalan yang lebih cerdas? Jadwalkan sesi diskusi dengan tim i3 untuk solusi terbaik bagi perusahaan Anda.

Written by: Fajrul Kamil Ramadhan, Middleware Consultant
Edited by: Pipit Pirda Damayanti, Marketing

Table of Contents

Share this article
Scroll to Top