Persisted Queries
Persisted QueriesPersisted Queries

Persisted Queries

Included in the โ€œPower Extensionsโ€ bundle

Gunakan GraphQL queries untuk membuat endpoint yang telah ditentukan sebelumnya seperti di REST, sehingga mendapatkan manfaat dari kedua API.

Deskripsi

Dengan REST, Anda membuat beberapa endpoint, masing-masing mengembalikan sekumpulan data yang telah ditentukan sebelumnya.

KeunggulanKelemahan
โœ… SederhanaโŒ Membosankan untuk membuat semua endpoint
โœ… Dapat diakses via GET atau POSTโŒ Proyek dapat menghadapi hambatan saat menunggu endpoint siap
โœ… Dapat di-cache di server atau CDNโŒ Membuat dokumentasi adalah suatu keharusan
โœ… Aman: hanya data yang dimaksud yang dieksposโŒ Bisa lambat (terutama untuk aplikasi mobile), karena aplikasi mungkin memerlukan beberapa permintaan untuk mengambil semua data

Dengan GraphQL, Anda memberikan query apa pun ke satu endpoint, yang mengembalikan tepat data yang diminta.

KeunggulanKelemahan
โœ… Tidak ada under/over fetching dataโŒ Hanya dapat diakses via POST
โœ… Bisa cepat, karena semua data diambil dalam satu permintaanโŒ Tidak dapat di-cache di server atau CDN, sehingga lebih lambat dan lebih mahal dari yang seharusnya
โœ… Memungkinkan iterasi proyek yang cepatโŒ Mungkin perlu menemukan kembali solusi yang sudah ada, seperti mengunggah file atau caching
โœ… Dapat mendokumentasikan diri sendiriโŒ Harus menangani kompleksitas tambahan, seperti masalah N+1
โœ… Menyediakan editor untuk query (GraphiQL) yang menyederhanakan tugasย 

Persisted queries menggabungkan 2 pendekatan ini bersama-sama:

  • Menggunakan GraphQL untuk membuat dan menyelesaikan queries
  • Namun alih-alih mengekspos satu endpoint, setiap query yang telah ditentukan diekspos di bawah endpointnya sendiri

Dengan demikian, kita mendapatkan beberapa endpoint dengan data yang telah ditentukan, seperti di REST, tetapi dibuat menggunakan GraphQL, sehingga mendapatkan keunggulan dari masing-masing dan menghindari kelemahannya:

KeunggulanKelemahan
โœ… Dapat diakses via GET atau POSTโŒ Membosankan untuk membuat semua endpoint
โœ… Dapat di-cache di server atau CDNโŒ Proyek dapat menghadapi hambatan saat menunggu endpoint siap
โœ… Aman: hanya data yang dimaksud yang dieksposโŒ Membuat dokumentasi adalah suatu keharusan
โœ… Tidak ada under/over fetching dataโŒ Bisa lambat (terutama untuk aplikasi mobile), karena aplikasi mungkin memerlukan beberapa permintaan untuk mengambil semua data
โœ… Bisa cepat, karena semua data diambil dalam satu permintaanโŒ Hanya dapat diakses via POST
โœ… Memungkinkan iterasi proyek yang cepatโŒ Tidak dapat di-cache di server atau CDN, sehingga lebih lambat dan lebih mahal dari yang seharusnya
โœ… Dapat mendokumentasikan diri sendiriโŒ Mungkin perlu menemukan kembali solusi yang sudah ada, seperti mengunggah file atau caching
โœ… Menyediakan editor untuk query (GraphiQL) yang menyederhanakan tugasโŒ Harus menangani kompleksitas tambahan, seperti masalah N+1 ๐Ÿ‘ˆ๐Ÿป masalah ini diselesaikan oleh mesin yang mendasarinya

Editor persisted query

Menjalankan Persisted Query

Setelah persisted query dipublikasikan, kita dapat menjalankannya melalui permalinknya.

Persisted query dapat dijalankan langsung di browser, karena diakses via GET, dan kita akan mendapatkan data yang diminta dalam format JSON:

Menjalankan persisted query di browser

Membuat Persisted Query

Mengklik tautan Persisted Queries di menu akan menampilkan daftar semua persisted queries yang telah dibuat:

Persisted queries dengan deskripsi
Persisted queries dengan deskripsi

Persisted query adalah custom post type (CPT). Untuk membuat persisted query baru, klik tombol "Add New GraphQL persisted query", yang akan membuka editor WordPress:

Membuat Persisted Query baru

Input utama adalah klien GraphiQL, yang dilengkapi dengan Explorer secara default. Mengklik field di panel sisi kiri menambahkannya ke query, dan mengklik tombol "Run" menjalankan query:

GraphiQL Explorer

Ketika query siap, publikasikan, dan permalinknya menjadi endpointnya. Tautan ke endpoint (dan ke source) ditampilkan di panel sidebar "Persisted Query Endpoint Overview":

Persisted Query Endpoint Overview

Menambahkan ?view=source ke permalink akan menampilkan persisted query dan konfigurasinya (selama pengguna sudah masuk dan peran pengguna memiliki akses ke sana):

Source persisted query

Secara default, endpoint persisted query memiliki path /graphql-query/, dan nilai ini dapat dikonfigurasi melalui Settings:

Pengaturan Persisted query
Pengaturan Persisted query

Konfigurasi schema

Mendefinisikan elemen apa yang terdapat dalam schema, dan akses apa yang akan dimiliki pengguna terhadapnya, didefinisikan dalam konfigurasi schema.

Jadi kita harus membuat konfigurasi schema, kemudian memilihnya dari dropdown:

Memilih konfigurasi schema

Mengorganisir Persisted Queries berdasarkan Kategori

Di panel sidebar "Endpoint categories" kita dapat menambahkan kategori untuk membantu mengelola Persisted Query:

Kategori endpoint saat mengedit Persisted Query

Misalnya, kita dapat membuat kategori untuk mengelola endpoint berdasarkan klien, aplikasi, atau informasi lain yang diperlukan:

Daftar kategori endpoint

Pada daftar Persisted Queries, kita dapat memvisualisasikan kategorinya dan, dengan mengklik tautan kategori mana pun, atau menggunakan filter di bagian atas, hanya akan menampilkan semua entri untuk kategori tersebut:

Daftar Persisted Queries dengan kategorinya

Persisted queries privat

Dengan mengatur status Persisted Query sebagai private, endpoint hanya dapat diakses oleh pengguna admin. Ini mencegah data kita dibagikan secara tidak sengaja kepada pengguna yang seharusnya tidak memiliki akses ke data tersebut.

Misalnya, kita dapat membuat Persisted Queries privat yang membantu mengelola aplikasi, seperti mengambil data untuk membuat laporan dengan metrik kita.

Persisted Query privat

Persisted queries yang dilindungi kata sandi

Jika kita membuat Persisted Query untuk klien tertentu, kita dapat menetapkan kata sandi untuk itu, untuk memberikan tingkat keamanan tambahan bahwa hanya klien tersebut yang akan mengakses endpoint.

Persisted Query yang dilindungi kata sandi

Saat pertama kali mengakses persisted query yang dilindungi kata sandi, kita akan menemukan layar yang meminta kata sandi:

Persisted Query yang dilindungi kata sandi: Akses pertama

Setelah kata sandi diberikan dan divalidasi, barulah pengguna dapat mengakses endpoint yang dimaksud.

Membuat persisted query dinamis melalui URL params

Nilai untuk setiap variabel dapat diatur melalui URL param (dengan nama variabel) saat menjalankan persisted query. Jika opsi "Do URL params override variables?" diaktifkan, maka URL param akan mendapat prioritas. Jika tidak, nilai yang ditentukan dalam kamus variabel akan mendapat prioritas (jika ada).

Misalnya, dalam query ini, jumlah hasil dikontrol melalui variabel $limit, dengan nilai default 3:

Menggunakan variabel dalam persisted query

Saat menjalankan persisted query ini, meneruskan ?limit=5 akan menjalankan query yang mengembalikan 5 hasil:

Mengganti nilai variabel dalam persisted query