Kekurangan:
- Anda perlu mempelajari cara mengatur GraphQL. Ekosistemnya masih berkembang pesat jadi Anda harus mengikutinya.
- Anda perlu mengirim kueri dari klien, Anda bisa mengirim string tetapi jika Anda ingin lebih nyaman dan caching Anda akan menggunakan perpustakaan klien -> kode tambahan di klien Anda
- Anda perlu menentukan skema terlebih dahulu => pekerjaan ekstra sebelum Anda mendapatkan hasil
- Anda harus memiliki titik akhir graphql di server Anda => perpustakaan baru yang belum Anda ketahui
- Kueri graphql lebih banyak byte daripada sekadar pergi ke titik akhir REST
- Server perlu melakukan lebih banyak pemrosesan untuk mengurai kueri dan memverifikasi parameter
Tapi, itu lebih dari diimbangi oleh ini:
- GraphQL tidak terlalu sulit untuk dipelajari
- Kode ekstra hanya beberapa KB
- Dengan menentukan skema, Anda akan mencegah lebih banyak pekerjaan setelah itu memperbaiki bug dan menanggung pemutakhiran berbulu
- Ada banyak orang yang beralih ke GraphQL sehingga ada ekosistem yang kaya yang berkembang, dengan perkakas yang sangat baik
- Saat menggunakan kueri persisten dalam produksi (mengganti kueri GraphQL hanya dengan ID dan parameter), Anda sebenarnya mengirim lebih sedikit byte daripada dengan REST
- Pemrosesan ekstra untuk kueri yang masuk dapat diabaikan
- Menyediakan decoupling yang bersih dari API dan backend memungkinkan iterasi yang jauh lebih cepat pada improvisasi backend
graphql-spring-boot-starter
dangraphql-java-tools
memulai. Buat skema Anda di sumber daya .graphqls dan buat kelas Resolver dan selesai. Untuk mendapatkan contoh uji kerja dan berjalan membutuhkan waktu sekitar 10 menit.Saya telah menemukan beberapa masalah penting bagi siapa pun yang mempertimbangkan untuk menggunakan GraphQL , dan hingga saat ini poin utamanya adalah:
Query In Indefinite Depth : GraphQL tidak dapat melakukan query dalam kedalaman yang tidak terbatas, jadi jika Anda memiliki pohon dan ingin mengembalikan cabang tanpa mengetahui kedalamannya, Anda harus melakukan beberapa pagination.
Struktur Respon Spesifik : Di GraphQL, responnya sesuai dengan bentuk kueri, jadi jika Anda perlu merespons dalam struktur yang sangat spesifik, Anda harus menambahkan lapisan transformasi untuk membentuk kembali respons.
Cache di Tingkat Jaringan : Karena cara umum GraphQL digunakan melalui HTTP (POST dalam satu titik akhir), cache di tingkat jaringan menjadi sulit. Salah satu cara untuk mengatasinya adalah dengan menggunakan Persisted Queries.
Menangani Unggahan File : Tidak ada tentang unggahan file dalam spesifikasi GraphQL dan mutasi tidak menerima file dalam argumen. Untuk mengatasinya, Anda dapat mengunggah file menggunakan jenis API lain (seperti REST) dan meneruskan URL file yang diunggah ke mutasi GraphQL, atau menyuntikkan file dalam konteks eksekusi, sehingga Anda akan memiliki file di dalam fungsi resolver.
Eksekusi Tidak Dapat Diprediksi: Sifat GraphQL adalah Anda dapat melakukan kueri dengan menggabungkan bidang apa pun yang Anda inginkan, tetapi fleksibilitas ini tidak gratis. Ada beberapa masalah yang perlu diketahui seperti Performa dan Kueri N + 1.
Super Simple API : Jika Anda memiliki layanan yang mengekspos API yang sangat sederhana, GraphQL hanya akan menambahkan kompleksitas ekstra, jadi REST API sederhana bisa lebih baik.
sumber
Masalah terbesar yang saya lihat dengan graphQL yaitu jika Anda menggunakan dengan database relasional adalah dengan bergabung .
Fakta bahwa Anda dapat mengizinkan / melarang beberapa bidang membuat gabungan tidak sepele (tidak sederhana). Yang mengarah ke pertanyaan tambahan.
Kueri bersarang di graphql juga mengarah ke kueri melingkar dan dapat merusak server . Perhatian ekstra harus diberikan.
Pembatasan tarif panggilan menjadi sulit karena sekarang pengguna dapat mengaktifkan beberapa kueri dalam satu panggilan.
TIPS : Gunakan dataloader facebook untuk mengurangi jumlah kueri dalam kasus javascript / node
sumber
cost
permintaan. Juga ini bukan masalah jika Anda menggunakan kueri yang telah ditentukan sebelumnya, di mana klien hanya mengirimkan ID.Semakin baik dan lebih baik setiap tahun, dan untuk saat ini, komunitas GraphQL berkembang, dan sebagai hasilnya, ada lebih banyak solusi untuk banyak masalah yang disorot dalam jawaban lain sebelumnya. Tetapi untuk mengakui apa yang masih menahan perusahaan dari membuang semua sumber daya ke GraphQL, saya ingin membuat daftar beberapa masalah dan solusi yang diikuti oleh yang belum terpecahkan.
Tetapi ada beberapa kasus lagi yang dapat dianggap sebagai kerugian:
Singkatnya, GraphQL hanyalah alat untuk tujuan tertentu dan yang pasti ini bukan solusi tepat untuk semua masalah dan tentu saja bukan pengganti REST.
sumber
Sangat menyenangkan memiliki satu titik akhir dan mengekspos semua data. Saya menemukan poin-poin di bawah ini untuk dipertimbangkan untuk GraphQL:
Juga, seseorang harus mempertimbangkan Pro setelah implementasinya:
Mudah untuk menambahkan kondisi menggunakan argumen dan urutan kustom setelah diterapkan
Gunakan banyak filter khusus dan singkirkan semua tindakan yang perlu dibuat misalnya pengguna dapat memiliki id, nama, dll sebagai argumen dan melakukan pemfilteran. Selain itu, filter juga dapat diterapkan pada grup di pengguna.
sumber
Saya pikir graphql untuk saat ini harus menjadi bagian dari arsitektur backend, untuk unggahan file Anda masih menggunakan api biasa
sumber