Persisted Queries
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.
| Keunggulan | Kelemahan |
|---|---|
| โ 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.
| Keunggulan | Kelemahan |
|---|---|
| โ 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:
| Keunggulan | Kelemahan |
|---|---|
โ
Dapat diakses via GET atau POST | |
| โ Dapat di-cache di server atau CDN | |
| โ Aman: hanya data yang dimaksud yang diekspos | |
| โ Tidak ada under/over fetching data | |
| โ Bisa cepat, karena semua data diambil dalam satu permintaan | POST |
| โ Memungkinkan iterasi proyek yang cepat | |
| โ Dapat mendokumentasikan diri sendiri | |
| โ Menyediakan editor untuk query (GraphiQL) yang menyederhanakan tugas |

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:

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

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

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:

Ketika query siap, publikasikan, dan permalinknya menjadi endpointnya. Tautan ke endpoint (dan ke source) ditampilkan di panel sidebar "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):

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

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:

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

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

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:

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 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.

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

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:

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