Gato GraphQL vs WP REST API
Perbandingan antara Gato GraphQL dan WP REST API


Perbedaan antara API REST dan GraphQL umumnya berlaku saat membandingkan WP REST API dengan Gato GraphQL.
Dengan GraphQL, Anda dapat menjalankan query GraphQL yang disesuaikan terhadap sebuah endpoint, menentukan data spesifik yang Anda butuhkan, dan mengambil hanya data tersebut dalam satu permintaan.
Misalnya, query GraphQL berikut akan mengambil data yang diperlukan untuk sebuah postingan tertentu, termasuk data dari relasinya (penulis, kategori, dan tag), semuanya dalam satu permintaan:
query {
post(by: { id: 1 }) {
title
content
url
date
author {
id
name
}
categories {
id
name
}
tags {
id
name
}
}
}Untuk mengambil data yang sama dengan REST, Anda mungkin perlu menjalankan permintaan pertama untuk mengambil data postingan, lalu permintaan tambahan untuk setiap relasinya (penulis, kategori, dan tag) guna mengambil datanya.
Perbedaan arsitektur antara REST dan GraphQL ini telah dibahas secara luas di tempat lain, sehingga mulai sekarang kami tidak akan mengulanginya di sini.
Di bawah ini, mari kita lakukan perbandingan yang lebih spesifik antara Gato GraphQL + semua ekstensi, dan WP REST API.
Tabel ringkasan
| Fitur | Gato GraphQL | WP REST API |
|---|---|---|
| Pengambilan Data | Menjalankan query GraphQL yang disesuaikan terhadap sebuah endpoint, mengambil data spesifik dalam satu permintaan. | Memerlukan beberapa permintaan ke endpoint yang berbeda untuk mengambil data terkait (mis., data postingan, data penulis, kategori, dan tag). |
| Endpoints | Mendukung Persisted Queries, yaitu endpoint dengan data yang telah ditentukan sebelumnya, dibuat menggunakan bahasa GraphQL melalui antarmuka pengguna di dalam wp-admin, tanpa perlu men-deploy kode. | Mengekspos data melalui endpoint REST, masing-masing dengan URL-nya sendiri dan data yang telah ditentukan sebelumnya, dibuat melalui kode PHP dan di-deploy dalam sebuah tema atau plugin. |
| Kontrol Akses | Memberikan fleksibilitas dengan kontrol akses di tingkat field berdasarkan aturan (mis., peran pengguna, kemampuan, rentang IP). | Membatasi data berdasarkan parameter context (mis., view untuk pengguna yang tidak terautentikasi, edit untuk pengguna terautentikasi dengan izin yang sesuai). |
| Operasi Massal | Mendukung Multiple Query Execution, di mana satu dokumen GraphQL dapat menjalankan beberapa operasi yang dapat berbagi state melalui direktif @export, meningkatkan batch requests. | Mengizinkan batch requests, di mana beberapa permintaan diselesaikan secara internal dalam satu permintaan HTTP. |
| Manajemen Situs | Dapat mengambil data, memodifikasinya, dan menyimpannya kembali dalam satu dokumen GraphQL melalui antarmuka pengguna, memungkinkan otomatisasi dan manajemen situs WordPress. Dapat menjalankan tugas dari beberapa plugin seperti menduplikasi, mengotomatisasi, mencadangkan, mencari/mengganti, webhooks, dan menerjemahkan. Merupakan API dan lebih dari itu. | Terutama merupakan API untuk mengakses dan memanipulasi data WordPress. |
| Generalitas | Alat generik untuk mengelola situs WordPress, mampu melakukan mutasi data dan integrasi dengan layanan pihak ketiga melalui query GraphQL. | Berfokus pada penyediaan API; memerlukan plugin tambahan atau kode khusus untuk mencapai fungsionalitas serupa. |
Ringkasan poin-poin utama:
- Pengambilan Data: Gato GraphQL menggunakan query yang disesuaikan, sementara WP REST API menggunakan beberapa permintaan endpoint.
- Endpoints: Gato GraphQL menggunakan persisted queries yang dibuat melalui UI, sementara WP REST API menggunakan endpoint REST yang dikodekan dalam PHP.
- Kontrol Akses: Gato GraphQL menawarkan kontrol di tingkat field, sementara WP REST API menggunakan parameter context.
- Operasi Massal: Gato GraphQL menggunakan Multiple Query Execution, dan WP REST API menggunakan batch requests.
- Manajemen Situs: Gato GraphQL adalah alat yang komprehensif, dan WP REST API terutama merupakan API.
Mengakses data yang telah ditentukan
Dengan WP REST API, Anda mengekspos data melalui endpoint REST. Setiap endpoint memiliki URL-nya sendiri, dan datanya telah ditentukan sebelumnya (untuk sumber daya yang bersangkutan, seperti postingan atau pengguna).
Mirip dengan endpoint REST, Gato GraphQL mendukung Persisted Queries, yang juga merupakan endpoint dengan data yang telah ditentukan sebelumnya. Meminta sebuah persisted query melalui GET akan menjalankan query GraphQL yang tersimpan, dan menghasilkan respons JSON yang diharapkan:

Perbedaannya adalah bahwa sementara endpoint REST API dibuat melalui kode PHP dan harus di-deploy dalam sebuah tema atau plugin, persisted queries Gato GraphQL dibuat menggunakan bahasa GraphQL, dan dipublikasikan melalui antarmuka pengguna (didukung oleh editor WordPress) di dalam wp-admin, tanpa perlu men-deploy kode apa pun.

Mekanisme caching yang sama dapat diterapkan pada endpoint REST dan persisted queries GraphQL. Karena persisted query diakses melalui endpoint-nya sendiri, responsnya dapat di-cache menggunakan HTTP caching standar (PRO).
Kontrol akses
Pembatasan data di WP REST API bergantung pada parameter context. Melewatkan ?context=view menghasilkan data untuk pengguna yang tidak terautentikasi, dan ?context=edit menyertakan data tambahan untuk pengguna terautentikasi (dengan izin yang tepat), seperti field content.raw pada postingan.
Gato GraphQL memberikan fleksibilitas yang jauh lebih besar, dengan setiap field tunggal dapat diakses atau tidak berdasarkan aturan Access Control. Anda dapat memvalidasi bahwa hanya pengguna yang sudah login, atau pengguna dengan peran atau kemampuan tertentu, atau pengunjung dari rentang IP tertentu, yang dapat mengakses field tertentu (PRO).

Operasi massal
WP REST API memungkinkan untuk menjalankan batch requests, di mana beberapa permintaan diselesaikan secara internal dalam satu permintaan HTTP.
Gato GraphQL menyediakan Multiple Query Execution, di mana satu dokumen GraphQL dapat menjalankan beberapa operasi.
Multiple Query Execution merupakan peningkatan atas batch requests, karena operasi-operasi tersebut dapat berbagi state satu sama lain melalui direktif @export.
Misalnya, untuk menduplikasi sebuah postingan, kita memiliki operasi query yang mengambil data postingan, dan meneruskan data tersebut ke operasi mutation yang membuat postingan baru dengan data itu:
query GetPostAndExportData($postId: ID!)
{
post(by: { id: $postId }, status: any) {
author {
id @export(as: "authorID")
}
categories {
id @export(as: "categoryIDs", type: LIST)
}
rawContent @export(as: "rawContent")
rawExcerpt @export(as: "excerpt")
featuredImage {
id @export(as: "featuredImageID")
}
tags {
id @export(as: "tagIDs", type: LIST)
}
rawTitle @export(as: "title")
}
}
mutation DuplicatePost
@depends(on: "GetPostAndExportData")
{
createPost(input: {
status: draft,
authorBy: {
id: $authorID
},
categoriesBy: {
ids: $categoryIDs
},
contentAs: {
html: $rawContent
},
excerpt: $excerpt
featuredImageBy: {
id: $featuredImageID
},
tagsBy: {
ids: $tagIDs
},
title: $title
}) {
postID
}
}Mengelola situs WordPress
Gato GraphQL memungkinkan kita untuk mengambil data dari database, memodifikasinya sesuai kebutuhan, dan menyimpannya kembali, semuanya dalam satu dokumen GraphQL.
Hal ini dicapai melalui antarmuka pengguna, untuk menyusun dan mempublikasikan query GraphQL, mengonfigurasi endpoint sesuai kebutuhan, dan mengotomatisasi eksekusi query saat suatu peristiwa terjadi.
Semua ini berarti bahwa Gato GraphQL adalah alat generik untuk mengelola situs WordPress kita, memenuhi kasus penggunaan di mana data (baik dari situs WordPress, maupun yang disediakan oleh layanan pihak ketiga) harus dimutasi, karena hal ini dapat dicapai dengan menjalankan query GraphQL tertentu.
Perhatikan bagaimana Gato GraphQL dapat menghadirkan fungsionalitas dari beberapa plugin:
- Ini bukan plugin duplikator, namun Anda dapat menduplikasi postingan dengannya.
- Ini bukan plugin otomatisasi, namun Anda dapat mengotomatisasi tugas-tugas Anda, tanpa batasan apa pun.
- Ini bukan plugin backup, namun Anda dapat mengimpor dan mengekspor postingan.
- Ini bukan plugin pencarian dan penggantian, namun Anda dapat memodifikasi postingan Anda secara massal.
- Ini bukan plugin webhook atau klien HTTP, namun Anda dapat mengirim permintaan ke API mana pun, dan menerima serta memproses permintaan masuk dari layanan mana pun.
- Ini bukan plugin terjemahan, namun Anda dapat menerjemahkan konten apa pun.
WP REST API hanyalah itu, sebuah API.
Gato GraphQL juga merupakan API, tetapi juga jauh lebih dari itu.
