Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Membandingkan REST dan GraphQL
API (Application Programming Interfaces) memainkan peran penting dalam memfasilitasi pertukaran data antar aplikasi. Seperti yang dinyatakan sebelumnya, dua pendekatan menonjol untuk merancang API telah muncul: GraphQL dan REST. Sementara keduanya melayani tujuan mendasar untuk mengaktifkan komunikasi klien-server, keduanya berbeda secara signifikan dalam implementasi dan kasus penggunaannya.
GraphQL dan REST berbagi beberapa karakteristik utama:
-
Client-Server Model: Keduanya menggunakan arsitektur client-server untuk pertukaran data.
-
Tanpa kewargan egaraan: Tidak ada yang memelihara informasi sesi klien di antara permintaan.
-
HTTP-Based: Keduanya biasanya menggunakan HTTP sebagai protokol komunikasi yang mendasarinya.
-
Resource-Oriented Desain: Keduanya merancang pertukaran data mereka di sekitar sumber daya, yang mengacu pada data atau objek apa pun yang dapat diakses dan dimanipulasi klien melalui API.
-
Fleksibilitas Format Data: JSON adalah format pertukaran data yang paling umum digunakan di keduanya, meskipun format lain seperti XML dan HTML juga didukung.
-
Bahasa dan Basis Data Agnostik: Keduanya dapat bekerja dengan bahasa pemrograman atau struktur database apa pun, membuatnya sangat dapat dioperasikan.
-
Dukungan Caching: Keduanya mendukung caching, memungkinkan klien dan server untuk menyimpan data yang sering diakses untuk meningkatkan kinerja.
Sementara berbagi beberapa prinsip dasar, GraphQL dan REST berbeda secara signifikan dalam pendekatan mereka terhadap desain API dan pengambilan data:
-
Struktur Permintaan dan Pengambilan Data
REST menggunakan metode HTTP yang berbeda (GET, POST, PUT, DELETE) untuk melakukan operasi pada sumber daya. Ini sering membutuhkan beberapa titik akhir untuk sumber daya yang berbeda, yang dapat menyebabkan inefisiensi dalam pengambilan data. Misalnya, menjalankan operasi GET untuk mengambil data pengguna dapat menyebabkan pengambilan data secara berlebihan atau kurang pengambilan. Untuk mendapatkan data yang benar, pemotongan atau beberapa operasi dapat dipanggil.
GraphQL menggunakan titik akhir tunggal untuk semua operasi. Ini bergantung pada kueri untuk mengambil data dan mutasi untuk memodifikasi data. Klien dapat menggunakan kueri untuk mengambil data yang mereka butuhkan dalam satu permintaan, yang mengurangi overhead jaringan dengan meminimalkan transfer data.
-
Server-side Skema
REST tidak memerlukan skema sisi server, meskipun skema dapat didefinisikan secara opsional untuk desain dan dokumentasi API yang efisien.
GraphQL menggunakan skema sisi server yang diketik kuat untuk menentukan data dan layanan data. Skema, ditulis dalam GraphQL Schema Definition Language (SDL), mencakup tipe objek dan bidang untuk setiap objek dan fungsi resolver sisi server yang menentukan operasi untuk setiap bidang.
-
Pembuatan versi
REST sering menyertakan versi di URL, yang dapat menyebabkan pemeliharaan beberapa versi API secara bersamaan. Pembuatan versi tidak wajib tetapi dapat membantu mencegah perubahan yang rusak.
GraphQL mempromosikan evolusi berkelanjutan dari API tanpa versi eksplisit dengan memerlukan kompatibilitas mundur. Bidang yang dihapus mengembalikan pesan kesalahan, sementara tag penghentian menghapus bidang lama dan mengembalikan pesan peringatan.
-
Penanganan Kesalahan
REST diketik dengan lemah, membutuhkan penanganan kesalahan untuk dibangun ke dalam kode sekitarnya. Ini mungkin tidak secara otomatis mengidentifikasi kesalahan terkait tipe (misalnya, mengurai angka sebagai teks).
Sebaliknya, GraphQL diketik dengan kuat dan membutuhkan definisi skema yang komprehensif. Ini memungkinkan layanan Anda untuk secara otomatis mengidentifikasi banyak kesalahan permintaan dengan tingkat detail yang tinggi.
-
Kasus Penggunaan
REST lebih cocok untuk:
-
Aplikasi yang lebih kecil dengan persyaratan data yang kurang kompleks.
-
Skenario di mana data dan operasi digunakan dengan cara yang sama oleh semua klien.
-
Aplikasi tanpa kebutuhan kueri data yang kompleks.
GraphQL lebih cocok untuk:
-
Skenario dengan bandwidth terbatas, di mana meminimalkan permintaan dan tanggapan sangat penting.
-
Aplikasi dengan beberapa sumber data yang perlu digabungkan pada satu titik akhir.
-
Kasus di mana permintaan klien bervariasi secara signifikan dan mengharapkan struktur respons yang berbeda.
Perhatikan bahwa dimungkinkan untuk menggunakan GraphQL dan REST API dalam satu aplikasi untuk area fungsionalitas yang berbeda. Selain itu, Anda dapat memutakhirkan RESTful API untuk menyertakan kemampuan GraphQL tanpa penulisan ulang lengkap. Lihat Bagaimana membangun resolver GraphQL untuk sumber AWS data sebagai
contoh. -