Apa Perbedaan Antara GraphQL dan REST?
GraphQL dan REST adalah dua pendekatan berbeda untuk mendesain API guna bertukar data melalui internet. REST memungkinkan aplikasi klien untuk bertukar data dengan server menggunakan kata kerja HTTP, yang merupakan protokol komunikasi standar internet. Di sisi lain, GraphQL adalah bahasa kueri API yang menentukan spesifikasi mengenai bagaimana seharusnya aplikasi klien meminta data dari server jarak jauh. Anda dapat menggunakan GraphQL dalam panggilan API tanpa bergantung pada aplikasi sisi server untuk menentukan permintaan. GraphQL dan REST adalah teknologi kuat di balik sebagian besar aplikasi modern kami.
Apa saja persamaan antara GraphQL dan REST?
Baik GraphQL dan REST adalah gaya arsitektur API populer yang memungkinkan pertukaran data antara berbagai layanan atau aplikasi dalam model klien-server.
API memfasilitasi akses data dan operasi data seperti berikut:
- Klien mengirimkan permintaan API ke titik akhir atau beberapa titik akhir pada sebuah server
- Server memberikan respons yang berisi data, status data, atau kode kesalahan
REST dan GraphQL memungkinkan Anda untuk membuat, memodifikasi, memperbarui, dan menghapus data pada aplikasi, layanan, atau modul yang terpisah melalui API. API yang dikembangkan dengan REST dikenal sebagai API RESTful atau API REST. API yang dikembangkan dengan GraphQL disebut dengan API GraphQL.
Tim frontend dan backend menggunakan arsitektur API ini untuk membuat aplikasi yang modular dan mudah diakses. Menggunakan arsitektur API membantu menjaga sistem tetap aman, modular, dan dapat diskalakan. Hal ini juga membuat sistem memiliki performa yang lebih baik dan menjadi lebih mudah berintegrasi dengan sistem lain.
Berikutnya, kami akan membahas beberapa persamaan lainnya antara GraphQL dan REST.
Arsitektur
Baik REST maupun GraphQL menerapkan beberapa prinsip arsitektur API umum. Misalnya, berikut adalah prinsip yang dimiliki keduanya:
- Keduanya stateless, sehingga server tidak menyimpan riwayat respons antarpermintaan
- Keduanya menggunakan model klien-server, sehingga permintaan dari satu klien menghasilkan balasan dari satu server
- Keduanya berbasis HTTP karena HTTP adalah protokol komunikasi yang mendasarinya
Desain yang berbasis sumber daya
Baik REST maupun GraphQL mendesain pertukaran datanya di sekitar sumber daya. Sumber daya merujuk pada data atau objek apa pun yang dapat diakses dan dimanipulasi oleh klien melalui API. Setiap sumber daya memiliki pengidentifikasi uniknya (URI) masing-masing dan set operasi (metode HTTP) yang dapat dijalankan oleh klien.
Misalnya, perhatikan API media sosial tempat pengguna membuat dan mengelola posting. Dalam API berbasis sumber daya, posting merupakan sebuah sumber daya. Sumber daya ini memiliki pengidentifikasi uniknya sendiri, misalnya, /posts/1234. Sumber daya ini juga memiliki set operasi, seperti GET untuk mengambil posting di REST atau query untuk mengambil posting di GraphQL.
Pertukaran Data
Baik REST maupun GraphQL mendukung format data yang serupa.
JSON adalah format pertukaran data paling populer yang dipahami semua bahasa, platform, dan sistem. Server mengembalikan data JSON ke klien. Format data lain juga tersedia, tetapi kurang umum digunakan, termasuk XML dan HTML.
Demikian pula, REST dan GraphQL mendukung caching. Jadi, klien dan server dapat membuat cache data yang sering diakses untuk meningkatkan kecepatan komunikasi.
Netralitas bahasa dan basis data
Baik API GraphQL maupun REST dapat berjalan dengan struktur basis data dan bahasa pemrograman apa pun, baik sisi klien maupun sisi server. Hal ini membuat keduanya sangat mudah dioperasikan dengan aplikasi apa pun.
Apa saja keterbatasan REST yang coba diatasi oleh GraphQL?
GraphQL muncul pada tahun 2012 sebagai respons terhadap kebutuhan akan kecepatan dalam platform-platform media sosial yang bermunculan. Developer menemukan bahwa arsitektur API yang ada, seperti REST, terlalu panjang dan terstruktur untuk menghasilkan umpan berita secara efisien.
Berikutnya, kami akan membahas beberapa tantangan yang mereka hadapi.
Pertukaran data struktur tetap
API REST mengharuskan permintaan klien untuk mengikuti struktur tetap guna menerima sumber daya. Struktur yang kaku ini mudah digunakan, tetapi tidak selalu menjadi cara yang paling efisien untuk bertukar data yang dibutuhkan secara tepat.
Overfetching dan underfetching
API REST selalu mengembalikan seluruh set data. Misalnya, dari objek person di REST API, Anda akan menerima nama, tanggal lahir, alamat, dan nomor telepon orang tersebut. Anda akan mendapatkan semua data ini bahkan jika Anda hanya membutuhkan nomor telepon.
Demikian pula, jika Anda ingin mengetahui nomor telepon dan pembelian terakhir seseorang, Anda memerlukan beberapa permintaan API REST. URL /person akan mengembalikan nomor telepon dan URL /purchase akan mengembalikan riwayat pembelian.
Developer media sosial harus menulis banyak kode hanya untuk memproses permintaan API, yang memengaruhi performa dan pengalaman pengguna.
GraphQL muncul sebagai sebuah solusi yang berbasis kueri. Kueri dapat mengembalikan data yang tepat hanya dalam satu pertukaran permintaan dan respons API.
Perbedaan utama: GraphQL vs. REST
API REST adalah konsep arsitektur untuk komunikasi aplikasi. Di sisi lain, GraphQL adalah sebuah spesifikasi, bahasa kueri API, dan seperangkat alat. GraphQL beroperasi melalui satu titik akhir menggunakan HTTP.
Selain itu, pengembangan REST lebih difokuskan pada pembuatan API baru. Sementara itu, fokus GraphQL adalah pada performa dan fleksibilitas API.
Berikutnya, kami akan menjelaskan beberapa perbedaan lainnya.
Permintaan sisi klien
Berikut yang digunakan permintaan REST untuk bekerja:
- Kata kerja HTTP yang menentukan tindakan
- URL yang mengidentifikasi sumber daya tempat untuk menjalankan kata kerja HTTP
- Parameter dan nilai yang akan diurai, jika Anda ingin membuat atau memodifikasi objek dalam sumber daya sisi server yang sudah ada
Misalnya, Anda menggunakan GET untuk mendapatkan data hanya-baca dari sumber daya, POST untuk menambahkan entri sumber daya baru, atau PUT untuk memperbarui sumber daya.
Sebaliknya, berikut yang digunakan oleh permintaan GraphQL:
- Kueri untuk mendapatkan data hanya-baca
- Mutasi untuk memodifikasi data
- Langganan untuk menerima pembaruan data berbasis peristiwa atau streaming
Format data menjelaskan cara server mengembalikan data menurut keinginan Anda, termasuk data objek dan bidang yang cocok dengan skema sisi server. Anda juga dapat memasukkan data baru. Secara internal, GraphQL mengirimkan setiap permintaan klien sebagai permintaan HTTP POST.
Data dikembalikan ke klien
Di bawah arsitektur REST, data dikembalikan ke klien dari server dalam struktur seluruh sumber daya yang ditentukan oleh server. Contoh berikut menunjukkan data yang dikembalikan di REST dan GraphQL.
Contoh data yang dikembalikan di REST
Di REST, GET/posts mengembalikan berikut ini:
[
{
"id": 1,
"title": "First Post",
"content": "This is the content of the first post."
},
{
"id": 2,
"title": "Second Post",
"content": "This is the content of the second post."
},
{
"id": 3,
"title": "Third Post",
"content": "This is the content of the third post."
}
]
Contoh data yang dikembalikan di GraphQL
Saat Anda menggunakan GraphQL, hanya data yang ditentukan dalam struktur yang diberikan oleh klien yang akan dikembalikan.
GET /graphql?query{post(id: 1) {id title content}} hanya mengembalikan posting pertama:
{
"data": {
"posts": [
{
"id": "1",
"title": "First Post",
"content": "This is the content of the first post."
},
]}}
Skema sisi server
GraphQL menggunakan skema sisi server untuk menentukan data dan layanan data, yang berbeda dari API REST.
Skema, yang ditulis dalam bahasa penentuan skema GraphQL, mencakup detail berikut:
- Tipe objek dan bidang yang dimiliki oleh setiap objek
- Fungsi resolver sisi server yang menentukan operasi untuk setiap bidang
Skema secara eksplisit menentukan tipe untuk menggambarkan semua data yang tersedia di sistem dan cara klien dapat mengakses atau memodifikasi data tersebut.
Di sisi lain, API REST tidak memerlukan skema sisi server. Namun, Anda dapat menentukannya secara opsional untuk desain API yang efisien, dokumentasi, dan pengembangan klien.
Versioning
Saat API berkembang, struktur dan operasi datanya dapat berubah. Untuk klien yang tidak memahami tentang hal ini, perubahan dapat merusak sistem atau memunculkan kesalahan yang tidak diketahui.
API REST sering menyertakan versioning dalam URL untuk mengatasi masalah ini, seperti https://example.com/api/v1/person/12341. Namun, versioning tidak wajib dan dapat menyebabkan kesalahan.
GraphQL membutuhkan kompatibilitas mundur API. Jadi bidang yang dihapus mengembalikan pesan kesalahan, atau bidang yang memiliki tanda usang akan mengembalikan peringatan.
Penanganan kesalahan
GraphQL adalah arsitektur API yang memiliki tipe kuat, yang berarti bahwa arsitektur tersebut memerlukan penjelasan yang mendetail tentang data, strukturnya, dan operasi data dalam skema. Karena tingkat detail dalam skemanya, sistem dapat secara otomatis mengidentifikasi kesalahan permintaan dan memberikan pesan kesalahan yang berguna.
API REST memiliki tipe lemah dan Anda harus membuat penanganan kesalahan ke dalam kode sekitarnya. Misalnya, jika permintaan PUT menguraikan nilai angka sebagai teks, bukan sebagai bilangan bulat, sistem tidak mengidentifikasi kesalahan secara otomatis.
Waktu penggunaan GraphQL vs. REST
Anda dapat menggunakan API GraphQL dan REST secara bergantian. Namun, ada beberapa kasus penggunaan di mana salah satu atau yang lainnya lebih cocok.
Misalnya, GraphQL kemungkinan merupakan pilihan yang lebih baik jika Anda mempertimbangkan beberapa hal ini:
- Anda memiliki bandwidth terbatas dan ingin meminimalkan jumlah permintaan serta respons
- Anda memiliki beberapa sumber data dan ingin menggabungkannya pada satu titik akhir
- Anda memiliki permintaan klien yang sangat bervariasi dan mengharapkan respons yang sangat berbeda
Di sisi lain, REST kemungkinan merupakan pilihan yang lebih baik jika Anda mempertimbangkan beberapa hal ini:
- Anda memiliki aplikasi yang lebih kecil dengan data yang kurang kompleks
- Anda memiliki data dan operasi yang digunakan oleh semua klien dengan cara yang sama
- Anda tidak membutuhkan kueri data yang kompleks
Anda juga bisa membangun satu aplikasi dengan API GraphQL dan API REST untuk area fungsionalitas yang berbeda.
Cara menggunakan GraphQL dan REST melalui API yang sama
Pemutakhiran API RESTful ke API GraphQL dapat dilakukan tanpa perlu melakukan penulisan ulang yang lengkap.
Berikut garis besar prosesnya:
- Pahami model data API RESTful. Untuk melakukannya, periksa bentuk data di setiap sumber daya URL.
- Tulis skema GraphQL dari model data.
- Tentukan operasi mana yang dilakukan klien pada data dan sertakan operasi tersebut ke dalam skema.
- Bangun fungsi resolver dalam kode sisi server untuk setiap bidang dalam skema.
- Buat server GraphQL dengan resolver dan skema.
Setelah ini, klien dapat berkomunikasi dengan API Anda menggunakan GraphQL maupun REST.
Ringkasan perbedaan: REST vs. GraphQL
REST |
GraphQL |
|
Apa itu? |
REST adalah seperangkat aturan yang menentukan pertukaran data terstruktur antara klien dan server. |
GraphQL adalah bahasa kueri, gaya arsitektur, dan seperangkat alat untuk membuat serta memanipulasi API. |
Paling cocok untuk |
REST cocok untuk sumber data sederhana yang sumber dayanya sudah diketahui. |
GraphQL cocok untuk sumber data yang besar, kompleks, dan saling terkait. |
Akses data |
REST memiliki beberapa titik akhir dalam bentuk URL untuk menentukan sumber daya. |
GraphQL memiliki titik akhir URL tunggal. |
Data yang dikembalikan |
REST mengembalikan data dalam struktur tetap yang ditentukan oleh server. |
GraphQL mengembalikan data dalam struktur fleksibel yang ditentukan oleh klien. |
Cara penyusunan dan penetapan data |
Data REST mempunyai tipe lemah. Jadi, klien harus menentukan cara untuk menafsirkan data yang diformat saat data dikembalikan. |
Data GraphQL mempunyai tipe kuat. Jadi, klien akan menerima data dalam format yang telah ditentukan dan sama-sama dipahami. |
Pemeriksaan kesalahan |
Dengan REST, klien harus memeriksa apakah data yang dikembalikan valid. |
Dengan GraphQL, permintaan yang tidak valid biasanya ditolak oleh struktur skema. Hasilnya adalah pesan kesalahan yang dibuat secara otomatis. |
Bagaimana AWS dapat mendukung kebutuhan GraphQL dan REST Anda?
Amazon Web Services (AWS) membantu Anda membangun dan melayani API yang dikelola dengan lebih baik.
AWS AppSync membuat GraphQL nirserver dan API publikasi-langganan (pub/sub). Layanan ini dapat menyederhanakan pengembangan aplikasi melalui titik akhir tunggal untuk mengkueri, memperbarui, atau memublikasikan data dengan aman.
Dengan AWS AppSync, Anda dapat membuat API yang memungkinkan klien untuk melakukan hal-hal berikut:
- Berinteraksi dengan beberapa sumber data seperti SQL, NoSQL, data pencarian, titik akhir REST, dan layanan mikro dengan satu panggilan jaringan
- Secara otomatis menyinkronkan data antara aplikasi seluler dan web serta cloud
- Menyiarkan data dari backend ke dan di antara klien yang terhubung
- Mengakses data Internet untuk Segala (IoT) untuk membangun dasbor waktu nyata di aplikasi seluler atau web
Demikian pula, Amazon API Gateway adalah layanan terkelola penuh yang memudahkan Anda dalam membuat, menerbitkan, memelihara, memantau, dan mengamankan API pada segala skala.
Berikut adalah beberapa manfaat dari penggunaan API Gateway:
- Memberi pengguna performa kecepatan tinggi baik untuk permintaan maupun respons API
- Mengotorisasi akses ke API Anda
- Menjalankan berbagai versi API yang sama secara bersamaan untuk mengulang, menguji, dan merilis versi baru dengan cepat
- Memantau metrik performa dan informasi tentang panggilan API, latensi data, dan tingkat kesalahan
Mulai gunakan GraphQL dan REST di AWS dengan membuat akun sekarang juga.