Jawaban:
Kekurangan:
Tapi, itu lebih dari diimbangi oleh ini:
graphql-spring-boot-starter
dan graphql-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.
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
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.
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.
Saya pikir graphql untuk saat ini harus menjadi bagian dari arsitektur backend, untuk unggahan file Anda masih menggunakan api biasa