Gato GraphQL vs WPGraphQL
Perbandingan antara Gato GraphQL dan WPGraphQL


Jika Anda hanya perlu membangun situs WordPress headless dan men-deploy-nya sebagai statis, dan saat ini menggunakan WPGraphQL, beralih ke Gato GraphQL tidak akan membuat perbedaan apa pun.
Selain itu, beralih ke Gato GraphQL memberikan banyak keuntungan. Berikut adalah manfaat yang disediakan oleh Gato GraphQL + semua ekstensi, yang tidak dimiliki WPGraphQL.
Tabel ringkasan
| Fitur | Gato GraphQL | WPGraphQL |
|---|---|---|
| Masalah N+1 Query | Bukan masalah karena desain arsitektur | Bisa menjadi masalah jika tidak ditangani; developer harus waspada |
| Keamanan: Nonaktifkan Endpoint | Dapat sepenuhnya menonaktifkan single endpoint dengan persisted queries (PRO) | Tidak tersedia |
| Kontrol Akses | Validasi per field, dengan roles/capabilities/IP, melalui UI (PRO) | Tidak per field, kurang granular |
| Kontrol Cache | max-age dihitung otomatis untuk queries (PRO) | Tidak ada kontrol cache otomatis |
| Endpoint Kustom | Beberapa endpoint yang dilindungi kata sandi/dapat dikustomisasi; hierarki endpoint didukung (PRO) | Single endpoint, kustomisasi terbatas |
| Pembaruan Massal & Cari/Ganti | Hapus massal, beri tag, ganti (dengan regex), melalui GraphQL (PRO) | Tidak tersedia |
| Fitur GraphQL Kustom/Eksperimental | Nested mutations, schema namespacing, oneOf input object | Sebagian besar spesifikasi GraphQL standar |
| Multiple Query Execution (Composability) | Beberapa queries dalam satu dokumen, berbagi status dengan @export | Batch queries (beberapa per request), tetapi tidak dapat berbagi status |
| Endpoint Internal/Privat | Endpoint privat untuk backend/hanya PHP, tidak terekspos ke pengguna (PRO) | Tidak tersedia |
| Mutasi Data yang Kaya | Ambil, modifikasi, dan simpan data dalam satu dokumen (PRO) | Tidak didukung |
| Sinkronisasi & Distribusi Konten | Impor/ekspor melalui GraphQL, RSS, CSV, REST API (PRO) | Tidak tersedia |
| Integrasi Layanan Web | Panggilan API keluar/masuk dan webhook (PRO) | Tidak didukung |
| Otomasi (Hooks/Workflows) | GraphQL sebagai otomasi workflow (PRO/editor UI) | Tidak tersedia |
| Kemudahan Penggunaan (Integrasi UI) | Fitur UI ekstensif untuk membangun/mengelola GraphQL queries | UI admin yang lebih dasar |
| Batching/Composability | Komponen fields/directives, logika resolver yang dapat digunakan kembali (PRO) | Tidak didukung |
| Multiple Query Execution | Didukung, dengan status bersama dan dependensi | Didukung, tanpa berbagi status |
| Penggunaan Headless/Statis Standar | Keduanya sama-sama mampu | Keduanya sama-sama mampu |
Label:
- (PRO): Menunjukkan fitur memerlukan versi/ekstensi berbayar/pro untuk Gato GraphQL.
Ringkasan poin utama:
- Gato GraphQL menawarkan fitur tambahan yang signifikan untuk pengembangan lanjutan, otomasi, dan keamanan
- Kedua plugin setara untuk instalasi WordPress statis/headless dasar
- Fitur lanjutan di Gato GraphQL berfokus pada:
- Kontrol yang terperinci
- Otomasi workflow
- Integrasi yang kaya
- Fitur GraphQL eksperimental modern
Kemudahan pengembangan
Developer tidak perlu khawatir tentang masalah query "n+1": Karena desain arsitektur server GraphQL, hal itu tidak akan terjadi.
Keamanan
Saat menggunakan persisted queries untuk mengekspos data yang telah ditentukan, Anda dapat sepenuhnya menonaktifkan single endpoint GraphQL, sehingga tidak dapat diakses bahkan oleh pengguna yang terautentikasi.

Kontrol akses
Anda dapat memvalidasi bahwa hanya pengguna yang sudah login, atau pengguna dengan role atau capability tertentu, atau pengunjung dari rentang IP tertentu, yang dapat mengakses data, per field (PRO).

Kontrol cache
Saat melakukan cache respons GraphQL menggunakan HTTP caching standar, header max-age dihitung secara otomatis, dari semua field yang ada dalam GraphQL query (PRO).

Kustomisasi dan manajemen endpoint
Anda dapat menyediakan beberapa custom endpoint, masing-masing dikustomisasi untuk pelanggan atau aplikasi tertentu, melindunginya dengan kata sandi.
Dan Anda dapat menambahkan kategori kustom ke dalamnya, dan memberikan hierarki pada mereka (seperti /graphql/customers/some-customer dan /graphql/customers/another-customer).

Pembaruan massal
Anda dapat menjalankan pembaruan secara massal. Misalnya, Anda dapat menghapus semua komentar di situs, atau menetapkan tag atau kategori ke semua postingan Anda.
Dan Anda dapat mencari dan mengganti string di ratusan postingan, misalnya untuk mengganti domain lama dengan domain baru, dan bahkan menggunakan regex (PRO).
Fitur GraphQL kustom
Anda akan mendapatkan akses ke fitur GraphQL baru yang diusulkan untuk spesifikasi tetapi belum dirilis, termasuk nested mutations, schema namespacing dan 'oneOf' Input Object.

Multiple Query Execution
WPGraphQL memungkinkan untuk mengeksekusi queries secara batch, di mana beberapa GraphQL queries diselesaikan dalam satu HTTP request.
Gato GraphQL menyediakan Multiple Query Execution, di mana satu dokumen GraphQL dapat mengeksekusi beberapa operasi.
Multiple Query Execution adalah peningkatan dari query batching, karena operasi dapat berbagi status satu sama lain melalui direktif @export.
Misalnya, untuk menduplikasi postingan, kita memiliki operasi query yang mengambil data postingan, dan meneruskan data ini ke operasi mutation yang membuat postingan baru dengannya:
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
}
}Composability
Anda akan memiliki kemampuan untuk mengkomposisi fields, di mana nilai sebuah field dapat diberikan sebagai input ke field lain dalam query yang sama, memungkinkan sekumpulan field resolver dasar untuk mencakup jumlah use case yang tak terbatas (PRO).
Misalnya, alih-alih membuat field Post.hasExcerpt, kita dapat menerapkan field _notEmpty pada Post.excerpt untuk menghasilkan nilai yang sama:
query {
post(by: { id: 1 }) {
excerpt
hasExcerpt: _notEmpty(value: $__excerpt)
}
}Demikian pula, Anda dapat mengkomposisi directives, sehingga sebuah directive dapat diterapkan pada properti dalam dari nilai field.
Misalnya, query berikut menerjemahkan nama-nama kategori postingan ke bahasa lain:
query {
post(by: { id: 1 }) {
title
categoryNames
frenchCategoryNames: categoryNames
@underEachArrayItem
@strTranslate(
from: "en",
to: "fr"
)
}
}Ketersediaan server GraphQL
Anda dapat mengekspos endpoint privat untuk mendukung blok Gutenberg Anda. Dan Anda dapat mengakses server GraphQL privat, untuk mengambil data bagi aplikasi Anda menggunakan kode PHP, tanpa mengekspos endpoint publik apa pun (PRO).
Fleksibilitas dalam mutasi data
Anda dapat menggunakan GraphQL untuk mengambil, memodifikasi, dan akhirnya menyimpan kembali konten di situs Anda, semua dalam satu dokumen GraphQL (PRO).
Misalnya, Anda dapat mengambil semua blok Gutenberg dalam sebuah postingan, mengekstrak propertinya, menerjemahkan string tersebut melalui Google Translate API, memasukkan string tersebut kembali ke dalam blok, dan menyimpan postingan kembali.
Sinkronisasi dan distribusi konten
Anda dapat menggunakan GraphQL untuk mengimpor postingan dari situs WordPress lain, dari RSS feed, dari CSV, atau dari REST atau GraphQL API mana pun (PRO).
Anda dapat mengekspor konten ke situs WordPress lain, dan menyimpannya sebagai JSON dan CSV (PRO).
Interaksi layanan web
Anda dapat memanggil API layanan eksternal mana pun melalui HTTP client (PRO). Misalnya, Anda dapat mendaftarkan pengguna WordPress Anda ke daftar email Mailchimp.
Dan Anda dapat menerima dan memproses data masuk dari layanan mana pun melalui webhook khusus (PRO). Misalnya, Anda dapat menangkap email newsletter yang terdaftar di situs sandbox InstaWP dan mengirimkannya secara otomatis ke Mailchimp.
Otomasi
Anda dapat menggunakan GraphQL untuk mengotomasi tugas dan workflow konten (PRO).
Misalnya, ketika sebuah postingan baru dibuat (event melalui hook draft_post) Anda dapat mengeksekusi persisted query yang memeriksa apakah postingan tidak memiliki thumbnail dan, dalam kasus itu, menghasilkan gambar dengan memanggil Stable Diffusion API, mengompresnya melalui TinyPng, dan akhirnya memasukkan gambar sebagai featured image postingan.

Kemudahan penggunaan
Semua use case tambahan ini dapat dicapai langsung di dalam wp-admin, dengan menyediakan GraphQL query melalui antarmuka pengguna, tanpa harus men-deploy kode PHP apa pun.
