Parser GraphQL

GraphQL adalah bahasa kueri untuk API yang memungkinkan klien meminta data yang tepat yang mereka butuhkan. Alat ini mengurai dan memformat kueri, mutasi, dan subscription GraphQL dengan indentasi yang tepat dan memvalidasi sintaks.

Spesifikasi

Kasus Penggunaan Umum

  • Memformat kueri GraphQL yang diminifikasi agar mudah dibaca
  • Memvalidasi sintaks kueri sebelum mengirim ke API
  • Debug permintaan GraphQL dari log atau alat jaringan
  • Mendokumentasikan kueri API untuk referensi tim

Fitur

  • Mengurai kueri, mutasi, dan subscription
  • Memformat dengan indentasi yang tepat
  • Memvalidasi sintaks GraphQL
  • Menangani fragment dan variabel
  • Menampilkan struktur operasi dan field
  • Menghasilkan otomatis template variabel JSON dengan nilai null
  • Analisis ukuran (byte asli vs terminifikasi dengan % penghematan)
  • Daftar root field dan fragment
  • Toggle tampilan terminifikasi

Contoh

Kueri Pengguna dengan Variabel

Coba →

Kueri yang mengambil data pengguna dengan pos bersarang.

query GetUser($id: ID!) {
  user(id: $id) {
    id
    name
    email
    posts {
      title
      createdAt
    }
  }
}

Tips

  • Kueri GraphQL menentukan dengan tepat field mana yang akan dikembalikan.
  • Gunakan fragment untuk menggunakan ulang seleksi field yang umum.
  • Variabel ($id) harus diteruskan secara terpisah, bukan diinterpolasi ke dalam string kueri.

Pemahaman Parser GraphQL

GraphQL adalah bahasa kueri untuk API yang dikembangkan secara internal di Facebook pada tahun 2012 dan dirilis sebagai open-source pada tahun 2015. Tidak seperti REST API di mana server mendefinisikan bentuk respons setiap endpoint, GraphQL memungkinkan klien menentukan dengan tepat field mana yang mereka butuhkan dalam satu permintaan, mengeliminasi over-fetching (menerima data yang tidak digunakan) dan under-fetching (membutuhkan beberapa round trip).

GraphQL API mengekspos skema bertipe kuat yang mendefinisikan semua tipe, field, dan relasi yang tersedia. Klien mengirim kueri (membaca data), mutasi (menulis data), atau subscription (pembaruan real-time via WebSocket). Setiap operasi menentukan set seleksi field, dan respons mencerminkan bentuk permintaan yang tepat. Variabel memungkinkan parameterisasi operasi tanpa interpolasi string, mencegah serangan injeksi dan memungkinkan caching kueri.

Fragment adalah seleksi field yang dapat digunakan ulang yang mengurangi duplikasi di seluruh operasi. Daripada mengulangi field yang sama di beberapa kueri, definisikan fragment sekali dan sebarkan di mana pun dibutuhkan. Inline fragment menangani tipe polimorfik, meminta field khusus tipe pada tipe union atau interface.

GraphQL telah mendapatkan adopsi luas untuk API yang menghadap klien, terutama dalam aplikasi mobile di mana efisiensi bandwidth penting. API utama dari GitHub, Shopify, dan lainnya menawarkan endpoint GraphQL. Ekosistemnya mencakup Apollo Client untuk manajemen state, GraphQL Code Generator untuk tipe TypeScript, dan GraphiQL untuk eksplorasi interaktif.

REST dan GraphQL mengambil pendekatan yang secara fundamental berbeda terhadap desain API. REST mengekspos beberapa endpoint dengan bentuk respons tetap, sementara GraphQL mengekspos satu endpoint di mana klien mendefinisikan dengan tepat data apa yang mereka butuhkan. REST dapat over-fetch (mengembalikan field yang tidak digunakan) atau under-fetch (membutuhkan beberapa round trip), dan GraphQL memecahkan keduanya dengan membiarkan klien menentukan struktur respons. REST tetap lebih sederhana untuk operasi CRUD yang langsung dan mendapatkan manfaat dari dukungan caching HTTP yang lebih baik.

Masalah kueri N+1 adalah jebakan performa umum dalam GraphQL. Ketika kueri meminta daftar item dan field terkait pada masing-masing, resolver naif mengambil daftar induk (1 kueri) kemudian mengambil data terkait untuk setiap item secara individual (N kueri). Pola DataLoader memecahkan ini dengan mengelompokkan dan mendeduplikasi kueri database dalam satu permintaan, mengumpulkan semua kunci yang dibutuhkan dan membuat satu pengambilan batch alih-alih N pengambilan individual.

GraphQL unggul untuk data kompleks yang saling terkait yang dikonsumsi secara berbeda oleh klien yang berbeda, dan sangat bernilai untuk aplikasi mobile di mana meminimalkan ukuran payload penting. Untuk API CRUD sederhana dengan satu atau dua klien, REST sering lebih sederhana dan lebih sesuai. Untuk komunikasi microservice internal, gRPC biasanya lebih cocok. Autentikasi di GraphQL ditangani di luar lapisan kueri, biasanya via header HTTP (Bearer tokens, session cookies) yang diproses oleh middleware sebelum resolver dieksekusi. Logika otorisasi diimplementasikan di resolver atau lapisan otorisasi khusus, dan objek konteks meneruskan identitas pengguna yang terautentikasi ke semua resolver sepanjang permintaan.

← Kembali ke semua alat