- Setelah menggunakannya selama 6 tahun sejak 2018, saya adalah penggemar berat GraphQL sejati, tetapi sekarang mulai ragu
- Saya ingin menjelaskan mengapa saya tidak lagi merekomendasikan GraphQL dan apa yang menurut saya merupakan alternatif yang lebih baik
Permukaan serangan
- GraphQL memiliki risiko memperluas permukaan serangan karena mengekspos bahasa kueri.
- Masalah yang terkait dengan otorisasi sangat penting.
- Pemeriksaan otorisasi yang tepat diperlukan untuk setiap field.
- Di REST API, lebih sederhana untuk memeriksa otorisasi per endpoint.
Otorisasi
- Hak akses pengguna harus diperiksa untuk setiap field.
- Di REST API, lebih sederhana untuk memeriksa otorisasi per endpoint.
Pembatasan laju
- Kueri GraphQL tidak memiliki batas ukuran, sehingga dapat memberi beban besar pada server.
- Ada cara untuk memperkirakan kompleksitas kueri dan membatasi kueri yang melebihi kompleksitas tertentu.
- Di REST API, lebih sederhana untuk membatasi jumlah permintaan.
Parsing kueri
- String kueri yang salah dapat menggunakan memori server secara berlebihan.
- Ada cara untuk menghentikan parsing dengan menetapkan jumlah kesalahan maksimum.
Kinerja
Pengambilan data dan masalah N+1
- Resolver field dapat memanggil sumber data eksternal berkali-kali.
- Masalah ini dapat diatasi dengan menggunakan pola Dataloader.
- Di REST, lebih sederhana untuk menangani masalah N+1 di controller.
Otorisasi dan masalah N+1
- Kode otorisasi dapat menyebabkan masalah N+1.
- Di REST, masalah ini tidak terjadi.
Coupling
- Dalam codebase GraphQL, business logic sangat terikat dengan lapisan transport.
- Diperlukan integration test, dan debugging menjadi sulit.
Kompleksitas
- Berbagai cara untuk mengatasi masalah keamanan dan kinerja GraphQL meningkatkan kompleksitas codebase.
- Solusi REST umumnya lebih sederhana.
Alternatif
- Disarankan JSON REST API yang menggunakan OpenAPI 3.0+.
- Jika ada klien yang ditulis dengan bahasa bertipe statis, OpenAPI bisa menjadi pilihan yang lebih baik.
- OpenAPI dapat secara otomatis menghasilkan kode klien yang type-safe.
Pendapat GN⁺
- GraphQL memang kuat, tetapi membutuhkan banyak upaya untuk mengatasi masalah keamanan dan kinerja.
- REST API relatif sederhana, dan dalam banyak kasus bisa lebih cocok.
- OpenAPI dapat menyediakan type safety dan alat otomatis untuk meningkatkan produktivitas pengembangan.
- Saat mengadopsi GraphQL, masalah keamanan dan kinerja harus dipertimbangkan secara matang.
- Penting untuk membandingkan kelebihan dan kekurangan REST dan GraphQL lalu memilih teknologi yang sesuai dengan proyek.
8 komentar
Alasan berhenti memakai GraphQL setelah 6 tahun
Era ledakan besar RPC akan datang
Ya begitulah... cuma karena muncul sesuatu yang terlihat fancy, bukan berarti harus langsung ditelan mentah-mentah dan dipuja-puja.. sekarang giliran ORM. Kamu juga tidak lama lagi...
ORM sudah ada lebih dari 20 tahun...
Pada 2018, PQ seharusnya sudah bukan hal yang terlalu baru lagi (sebenarnya sudah direkomendasikan sejak GraphQL pertama kali diumumkan), jadi cukup mengejutkan bahwa mereka tidak mencobanya selama 6 tahun...
Sulit untuk mengimplementasikan seluruh GraphQL sendiri karena semua alasan yang disebutkan di atas, baik dari sisi kompleksitas maupun stabilitas. Sepertinya lebih baik mengembangkan dengan menempatkan layer seperti hasura atau postgraphile di atas DB, lalu menambahkan graphql atau rest ke layer ini sesuai kebutuhan.
Opini Hacker News