Apa itu GraphQL?
Menjelajahi pengembangan API dengan IBM® API Connect Lihat cara IBM CIO mengurangi biaya API
Ilustrasi alur kerja API

Diterbitkan: 8 Desember 2023
Kontributor: Chrystal R.China, Michael Goodwin

Apa itu GraphQL?

GraphQL adalah bahasa kueri sumber terbuka dan runtime sisi server yang menentukan bagaimana klien harus berinteraksi dengan antarmuka pemrograman aplikasi (API). 

Menggunakan sintaksis intuitif yang memungkinkan pengguna membuat permintaan API dalam satu baris atau beberapa baris (daripada mengakses titik akhir yang rumit dengan banyak parameter), teknologi GraphQL mempermudah pembuatan dan respons terhadap permintaan API. GraphQL merupakan peningkatan dari arsitektur RESTful tradisional.

Pada awal tahun 2010, Facebook mengalami pertumbuhan dan transformasi besar-besaran. Namun, basis pengguna yang terus bertambah dan lingkungan aplikasi seluler yang semakin kompleks membuat pendekatan RESTful yang ada saat ini, yang membutuhkan beberapa kali perjalanan bolak-balik ke titik akhir yang berbeda untuk mengambil semua data kueri yang diperlukan, tidak berkelanjutan. 

Representational state transfer (REST) dan RESTful API tidak dilengkapi dengan baik untuk menangani antarmuka pengguna yang kompleks dan berbasis data, serta sering mengalami masalah latensi dan ketidakefisienan data, terutama bagi pengguna seluler dengan paket data yang terbatas dan/atau mahal.

Menanggapi tantangan ini, para teknisi Facebook mengembangkan GraphQL (bersama dengan platform aplikasi satu halaman React), merilisnya sebagai solusi sumber terbuka pada tahun 2015. Pada akhirnya, Facebook memindahkan layanan ke GraphQL Foundation, yang terdiri dari perusahaan anggota seperti AWS, Gatsby, Intuit, dan IBM, pada tahun 2018.  

Buka kemampuan data Anda dengan GraphQL dan IBM API Connect

Pelajari cara memecah silo data sambil menulis lebih sedikit kode dengan API GraphQL yang sangat responsif.

Konten terkait

IBM API Connect memenangkan penghargaan tertinggi

Bagaimana cara kerja API GraphQL?

Fitur pengambilan data deklaratif dari arsitektur GraphQL berkisar pada beberapa komponen dan proses utama, yang masing-masing memainkan peran unik dalam penanganan dan pemrosesan data.

Hal ini termasuk:

Skema

GraphQL bergantung pada sistem jenis yang kuat tempat semua jenis data direkam dalam bahasa definisi skema GraphQL (SDL). Skema dengan jenis menentukan jenis data yang dapat dikueri dalam API, serta hubungan antara jenis dan operasi yang tersedia bagi pengguna. Dengan kata lain, skema mendefinisikan kemampuan API dan bentuk data yang dapat digunakan klien untuk berinteraksi.

Resolver

Setiap bidang dalam skema didukung oleh sebuah resolver yang mengisi data dan menentukan respons terhadap sekumpulan bidang. Resolver, yang dapat mengambil data dari database, layanan cloud, atau hampir semua sumber lainnya, memberikan instruksi untuk mengubah operasi GraphQL (misalnya, kueri, mutasi, atau langganan) menjadi data.

Ketika bidang kueri dieksekusi, sistem akan membuat panggilan ke resolver yang sesuai untuk menghasilkan nilai berikutnya. Jika suatu bidang menghasilkan nilai skalar (misalnya string atau angka), eksekusi selesai. Jika suatu bidang menghasilkan nilai objek, kueri akan berisi lebih banyak bidang untuk objek tersebut. Proses ini terus berlanjut sampai hanya bidang skalar yang tersisa.

Resolver juga memfasilitasi pemformatan data dan membantu sistem menyatukan informasi dari berbagai sumber data.

Pertanyaan

Kueri data adalah permintaan yang dibuat oleh klien ke server GraphQL; kueri ini menentukan data apa yang ingin diambil oleh klien. Ketika sebuah kueri masuk, GraphQL memvalidasinya terhadap definisi skema dan, dengan menganggap kueri tersebut valid, mengeksekusinya. Struktur kueri biasanya mencerminkan struktur data respons, sehingga kebutuhan data menjadi eksplisit dan dapat diprediksi.

Mutasi

Mutasi adalah operasi GraphQL yang membuat, memperbarui, atau menghapus data di server. Operasi ini serupa dengan operasi POST, PUT, PATCH, dan DELETE dalam RESTful API.

Mirip dengan cara kerja kueri, mutasi GraphQL divalidasi terhadap skema dan definisinya. Setelah mutasi divalidasi dan dieksekusi, server mengembalikan respons JSON.

GraphQL vs API REST 

Meskipun API GraphQL telah muncul sebagai alternatif yang lebih efisien dan fleksibel, REST dan RESTful telah lama menjadi standar untuk arsitektur API. REST API adalah gaya arsitektur terstruktur untuk aplikasi hipermedia jaringan, yang dirancang untuk menggunakan protokol komunikasi klien-server yang dapat di-cache dan stateless (biasanya HTTP).

Baik GraphQL dan REST memungkinkan klien untuk berkomunikasi dengan server dan meminta data, tetapi ada perbedaan utama yang menjelaskan proliferasi sistem GraphQL. 

Pengambilan data

REST API dirancang berdasarkan sumber daya (misalnya, semua jenis objek, data, atau layanan yang dapat diakses oleh klien) dan bekerja dengan memiliki titik akhir (URL) yang berbeda untuk setiap sumber daya. REST API menggunakan struktur data tetap untuk menentukan bentuk dan ukuran sumber daya yang mereka sediakan untuk klien.

Ketika klien meminta sumber daya, server mengirimkan semua data yang terkait dengan sumber daya tersebut. Jika hanya membutuhkan sebagian data, klien masih menerima semua data (over-fetching); jika membutuhkan data yang mencakup banyak sumber daya, klien harus melakukan banyak panggilan API karena pengambilan data yang tidak memadai dari permintaan awal (under-fetching). 

Di sisi lain, GraphQL menggunakan satu titik akhir yang menyediakan deskripsi data yang lengkap dan mudah dipahami.  Kueri GraphQL dapat mengakses properti sumber daya dan mengikuti referensi di antara sumber daya, sehingga klien dapat memperoleh semua data yang dibutuhkannya dari satu permintaan ke server GraphQL dan menghindari masalah pengambilan berlebih dan pengambilan kurang.

Penerapan versi

Dalam arsitektur REST, perubahan struktur data sering kali mengharuskan tim mengubah versi API untuk mencegah kesalahan sistem dan gangguan layanan bagi pengguna akhir. Ini berarti pengembang harus membuat titik akhir baru setiap kali mereka mengubah struktur, sehingga menghasilkan beberapa versi API dan mempersulit proses pemeliharaan. 

GraphQL menghilangkan kebutuhan akan pembuatan versi karena klien dapat menentukan kebutuhan mereka dalam kueri. Jika bidang baru ditambahkan ke server, klien yang tidak membutuhkan bidang tersebut tidak akan terpengaruh. Sebaliknya, jika bidang tidak digunakan lagi, klien dapat terus memintanya sampai mereka memperbarui kueri mereka. 

Penanganan kesalahan

REST API menggunakan kode status HTTP untuk menunjukkan status/keberhasilan permintaan. Setiap kode status memiliki arti tertentu. Permintaan yang berhasil mengembalikan kode status 200, sementara kesalahan klien mungkin mengembalikan kode status 400 dan kesalahan server dapat mengembalikan kode status 500.

GraphQL menangani kesalahan secara berbeda. Setiap permintaan, terlepas dari apakah permintaan tersebut menghasilkan kesalahan, mengembalikan kode status 200 OK. Kesalahan tidak dikomunikasikan menggunakan kode status HTTP; sebaliknya, sistem mengomunikasikan kesalahan dalam badan respons bersama dengan data. Pendekatan ini mengharuskan klien mengurai badan respons untuk menentukan apakah permintaan berhasil, yang dapat membuat debugging API GraphQL sedikit menantang. 

Data real time

REST tidak memiliki dukungan bawaan untuk pembaruan real-time. Jika aplikasi web atau seluler membutuhkan fungsionalitas real-time dengan REST API, pengembang biasanya harus mengimplementasikan teknik seperti polling panjang (yaitu klien berulang kali melakukan polling pada server untuk mendapatkan data baru), peristiwa yang dikirim server, dan WebSockets, yang dapat menambah kerumitan pada aplikasi. 

Namun, GraphQL menyertakan dukungan bawaan untuk pembaruan waktu nyata menggunakan langganan. Langganan mempertahankan koneksi yang stabil ke server, memungkinkan server mendorong pembaruan ke klien setiap kali peristiwa tertentu terjadi dan memungkinkan klien untuk tetap mengetahui data API yang relevan. 

Alat dan ekosistem

Ekosistem REST sudah mapan dengan beragam alat, library, dan kerangka kerja yang tersedia untuk pengembang. Namun, bekerja dengan REST API sering kali mengharuskan tim untuk menavigasi beberapa titik akhir dan memahami konvensi/pola unik dari setiap API.

GraphQL relatif baru, tetapi ekosistem GraphQL telah berkembang pesat sejak diperkenalkan, dengan berbagai alat dan pustaka yang tersedia untuk pengembangan layanan frontend dan backend. Alat seperti GraphiQL, Apollo Studio, dan GraphQL Playground menyediakan lingkungan pengembangan terintegrasi dalam peramban (IDE) yang tangguh untuk menjelajahi dan menguji API GraphQL. Selain itu, GraphQL memiliki dukungan yang kuat untuk pembuatan kode, yang dapat menyederhanakan pengembangan sisi klien. 

Penyimpanan cache

REST API mengandalkan mekanisme penyimpanan cache HTTP seperti ETag dan header yang dimodifikasi terakhir. Meskipun efektif, strategi penyimpanan cache bisa jadi rumit untuk diterapkan dan mungkin tidak secara konsisten mengoptimalkan kinerja untuk semua contoh penggunaan.

API GraphQL bisa lebih menantang untuk di-cache karena sifat dinamis dari kueri. Namun, penggunaan kueri yang bertahan, cache respons, dan cache sisi server dapat mengurangi tantangan ini dan memberikan strategi penyimpanan cache yang efisien untuk arsitektur GraphQL. 

Masa depan GraphQL 

Sejak transisi GraphQL ke GraphQL Foundation, para pengembang telah membuat implementasi untuk berbagai bahasa pemrograman, termasuk JavaScript, Python, Ruby, dan PHP, di antaranya. Dan API GraphQL telah diadopsi oleh banyak sekali bisnis, seperti Github, Pinterest, Paypal, Shopify, Airbnb, dan banyaklagi1, yang memungkinkan lebih banyak klien menyederhanakan spesifikasi data, mengurangi transmisi data jaringan yang berlebihan atau tidak memadai, dan meningkatkan kemampuan pengambilan data secara keseluruhan.

Terlebih lagi, perusahaan dan pengembang mendorong federasi terbuka arsitektur GraphQL. Dalam iterasi saat ini, federasi GraphQL mengambil layanan GraphQL yang terpisah dan menggabungkannya ke dalam satu API GraphQL, yang berfungsi sebagai titik masuk ke semua data backend yang mendasarinya dan memfasilitasi pengambilan data permintaan tunggal. Sayangnya, implementasi federasi hanya berlaku untuk satu vendor saja.

Sebagai tanggapan, IBM mengadvokasi federasi demokratis, yang memfasilitasi agregasi data dari API GraphQL dan API non-GraphQL, bukan agregasi eksklusif GraphQL.2

Solusi terkait
IBM API Connect

IBM API Connect adalah solusi manajemen API siklus hidup penuh yang menggunakan pengalaman intuitif untuk membantu membuat, mengelola, mengamankan, menyosialisasikan, dan memonetisasi API secara konsisten, membantu mendukung transformasi digital on premises dan di seluruh cloud. 

Jelajahi API Connect

Pengembangan API dengan IBM API Connect

IBM® API Connect memudahkan pembuatan dan penerapan API GraphQL tingkat produksi dalam hitungan menit. Cukup berikan detail koneksi sumber data Anda dan API GraphQL yang aman dan optimal akan langsung dihasilkan.

Jelajahi pengembangan API dengan API Connect
Sumber daya GraphQL vs REST: Mana yang lebih baik untuk API?

Pelajari tentang dua pendekatan berbeda yang diambil oleh kerangka kerja ini untuk membangun API serta kekuatan dan kelemahan masing-masing.

IBM dinobatkan sebagai Pemimpin dalam Laporan Gartner untuk API Management

Baca 2023 Gartner Magic Quadrant untuk API Management guna mengetahui alasan IBM terus diakui sebagai Pemimpin dalam API Management.

Mengembangkan API dan aplikasi Anda

Jelajahi toolkit IBM® API Connect

Ringkasan satu halaman IBM API Connect

Maksimalkan nilai API untuk mendorong bisnis digital dengan solusi manajemen API yang komprehensif.

Kemampuan Penting untuk API Management

IBM dinobatkan sebagai Pemimpin dalam Laporan Gartner 2023: Kapabilitas Kritis untuk API Management.

Tutorial IBM API Connect

Tutorial ini memberikan instruksi langsung yang membantu pengembang mempelajari cara menggunakan teknologi dalam proyek mereka.

Ambil langkah selanjutnya

Gunakan IBM API Connect untuk mengamankan dan mengelola API perusahaan di sepanjang siklus prosesnya. Solusi ini membantu Anda dan pelanggan Anda secara konsisten membuat, mengelola, mengamankan, mensosialisasikan, dan memonetisasi API perusahaan, dan juga tersedia sebagai platform manajemen API yang dapat diskalakan di IBM Marketplace dan AWS.

Jelajahi API Connect Pesan demo langsung
Ambil langkah selanjutnya

Kendalikan ekosistem API Anda sembari mendorong strategi API Anda ke depan.

Jelajahi IBM API Connect Minta demo langsung
Catatan kaki

1"IBM mengakuisisi perusahaan rintisan GraphQL, StepZen, untuk meningkatkan kemampuannya dalam manajemen API" (tautan berada di luar ibm.com), TechCrunch, 8 Februari 2023

2"Alasan GraphQL Membutuhkan Pendekatan Federasi Terbuka" (tautan berada di luar ibm.com), Tumpukan Baru, 16 November 2023