Gato GraphQL vs WPGraphQL
Confronto tra Gato GraphQL e WPGraphQL


Se hai semplicemente bisogno di creare un sito WordPress headless e di distribuirlo in modalità statica, e attualmente utilizzi WPGraphQL, passare a Gato GraphQL non farà alcuna differenza.
Negli altri casi, passare a Gato GraphQL offre numerosi vantaggi. Di seguito i benefici forniti da Gato GraphQL + tutte le estensioni, che WPGraphQL non offre.
Tabella riepilogativa
| Funzionalità | Gato GraphQL | WPGraphQL |
|---|---|---|
| Problema N+1 | Non è un problema grazie alla progettazione architetturale | Può essere un problema se non gestito; lo sviluppatore deve esserne consapevole |
| Sicurezza: disabilitazione dell'endpoint | Può disabilitare completamente l'endpoint unico con le persisted queries (PRO) | Non disponibile |
| Controllo degli accessi | Validazione campo per campo, con ruoli/capacità /IP, tramite UI (PRO) | Non a livello di campo, meno granulare |
| Controllo della cache | max-age calcolato automaticamente per le queries (PRO) | Nessun controllo automatico della cache |
| Endpoint personalizzati | Endpoint multipli, protetti da password/personalizzabili; gerarchia di endpoint supportata (PRO) | Endpoint unico, personalizzazione limitata |
| Aggiornamenti in massa e cerca/sostituisci | Eliminazione in massa, etichettatura, sostituzione (con regex), tramite GraphQL (PRO) | Non disponibile |
| Funzionalità GraphQL personalizzate/sperimentali | Mutazioni annidate, schema namespacing, oneOf input object | Principalmente la specifica GraphQL standard |
| Multiple Query Execution (componibilità ) | Più queries in un documento, condivisione dello stato con @export | Queries in batch (più per richiesta), ma non possono condividere lo stato |
| Endpoint interni/privati | Endpoint privato solo per backend/PHP, non esposto agli utenti (PRO) | Non disponibile |
| Mutazione dei dati avanzata | Recuperare, modificare e persistere i dati in un singolo documento (PRO) | Non supportato |
| Sincronizzazione e distribuzione dei contenuti | Import/export tramite GraphQL, RSS, CSV, REST API (PRO) | Non disponibile |
| Integrazione di servizi web | Chiamate API in uscita/in entrata e webhook (PRO) | Non supportato |
| Automazione (hook/flussi di lavoro) | GraphQL come automazione dei flussi di lavoro (PRO/editor UI) | Non disponibile |
| Facilità d'uso (integrazione UI) | Ampie funzionalità UI per creare/amministrare le queries GraphQL | UI di amministrazione più basilare |
| Batching/componibilità | Composizione di campi/direttive, logica di resolver riutilizzabile (PRO) | Non supportato |
| Multiple Query Execution | Supportata, con stato condiviso e dipendenze | Supportata, senza condivisione dello stato |
| Uso headless/statico standard | Entrambi sono ugualmente capaci | Entrambi sono ugualmente capaci |
Legenda:
- (PRO): Indica che la funzionalità richiede la versione a pagamento/pro o le estensioni di Gato GraphQL.
Riepilogo dei punti chiave:
- Gato GraphQL offre importanti funzionalità aggiuntive per lo sviluppo avanzato, l'automazione e la sicurezza
- Entrambi i plugin sono equivalenti per le installazioni WordPress statiche/headless di base
- Le funzionalità avanzate di Gato GraphQL si concentrano su:
- Il controllo granulare
- L'automazione dei flussi di lavoro
- Le integrazioni avanzate
- Le moderne funzionalità GraphQL sperimentali
Facilità di sviluppo
Gli sviluppatori non devono preoccuparsi del problema delle query "n+1": a causa della progettazione architetturale del server GraphQL, semplicemente non si verifica.
Sicurezza
Quando utilizzi le persisted queries per esporre dati predefiniti, puoi disabilitare completamente l'endpoint unico GraphQL, in modo che non sia accessibile nemmeno agli utenti autenticati.

Controllo degli accessi
Puoi validare che solo gli utenti connessi, o gli utenti con un certo ruolo o capacità , o i visitatori provenienti da un certo intervallo IP, possano accedere ai dati, campo per campo (PRO).

Controllo della cache
Quando memorizzi nella cache la risposta GraphQL utilizzando la cache HTTP standard, l'header max-age viene calcolato automaticamente a partire da tutti i campi presenti nella query GraphQL (PRO).

Personalizzazione e gestione degli endpoint
Puoi fornire più endpoint personalizzati, ciascuno personalizzato per un cliente o un'applicazione specifica, proteggendoli tramite una password.
E puoi aggiungere loro categorie personalizzate e dare loro una gerarchia (come /graphql/customers/some-customer e /graphql/customers/another-customer).

Aggiornamenti in massa
Puoi eseguire aggiornamenti in massa. Ad esempio, puoi eliminare tutti i commenti del sito, oppure assegnare un'etichetta o una categoria a tutti i tuoi articoli.
E puoi cercare e sostituire una stringa in centinaia di articoli, ad esempio per sostituire il vecchio dominio con quello nuovo, e perfino utilizzando una regex (PRO).
Funzionalità GraphQL personalizzate
Avrai accesso a nuove funzionalità GraphQL, proposte per la specifica ma non ancora rilasciate, tra cui le mutazioni annidate, lo schema namespacing e l'oggetto di input 'oneOf'.

Multiple Query Execution
WPGraphQL consente di eseguire queries in batch, dove più queries GraphQL vengono risolte in una singola richiesta HTTP.
Gato GraphQL fornisce la Multiple Query Execution, dove un singolo documento GraphQL può eseguire più operazioni.
La Multiple Query Execution è un miglioramento rispetto al batching delle queries, poiché le operazioni possono condividere lo stato tra loro tramite la direttiva @export.
Ad esempio, per duplicare un articolo, abbiamo un'operazione query che recupera i dati dell'articolo e passa questi dati a un'operazione mutation che crea un nuovo articolo con essi:
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
}
}ComponibilitÃ
Avrai la possibilità di comporre campi, dove il valore di un campo può essere fornito come input a un altro campo nella stessa query, consentendo a un insieme fondamentale di resolver di campi di coprire un numero illimitato di casi d'uso (PRO).
Ad esempio, invece di creare il campo Post.hasExcerpt, possiamo applicare il campo _notEmpty su Post.excerpt per produrre lo stesso valore:
query {
post(by: { id: 1 }) {
excerpt
hasExcerpt: _notEmpty(value: $__excerpt)
}
}Allo stesso modo, puoi comporre direttive, in modo che una direttiva possa essere applicata su una proprietà interna del valore del campo.
Ad esempio, la seguente query traduce i nomi delle categorie dell'articolo in un'altra lingua:
query {
post(by: { id: 1 }) {
title
categoryNames
frenchCategoryNames: categoryNames
@underEachArrayItem
@strTranslate(
from: "en",
to: "fr"
)
}
}Disponibilità del server GraphQL
Puoi esporre endpoint privati per alimentare i tuoi blocchi Gutenberg. E puoi accedere a un server GraphQL privato, per recuperare dati per la tua applicazione tramite codice PHP, senza esporre alcun endpoint pubblico (PRO).
Versatilità nella mutazione dei dati
Puoi utilizzare GraphQL per recuperare, modificare e infine memorizzare nuovamente il contenuto del tuo sito, il tutto all'interno di un singolo documento GraphQL (PRO).
Ad esempio, puoi recuperare tutti i blocchi Gutenberg in un articolo, estrarre le loro proprietà , tradurre queste stringhe tramite l'API Google Translate, reinserire queste stringhe nel blocco, e memorizzare nuovamente l'articolo.
Sincronizzazione e distribuzione dei contenuti
Puoi utilizzare GraphQL per importare articoli da un altro sito WordPress, da un feed RSS, da un CSV, o da qualsiasi API REST o GraphQL (PRO).
Puoi esportare contenuti verso un altro sito WordPress, e memorizzarli in JSON e CSV (PRO).
Interazione con i servizi web
Puoi invocare l'API di qualsiasi servizio esterno tramite un client HTTP (PRO). Ad esempio, puoi iscrivere i tuoi utenti WordPress alla tua lista email Mailchimp.
E puoi ricevere ed elaborare dati in entrata da qualsiasi servizio tramite un webhook dedicato (PRO). Ad esempio, puoi acquisire gli indirizzi email della newsletter registrati in un sito sandbox InstaWP e inviarli automaticamente a Mailchimp.
Automazione
Puoi utilizzare GraphQL per automatizzare attività e flussi di contenuto (PRO).
Ad esempio, quando viene creato un nuovo articolo (evento tramite l'hook draft_post), puoi eseguire una persisted query che verifica se l'articolo non ha una miniatura e, in tal caso, genera un'immagine chiamando l'API Stable Diffusion, la comprime tramite TinyPng, e infine inserisce l'immagine come immagine in evidenza dell'articolo.

Facilità d'uso
Tutti questi casi d'uso aggiuntivi possono essere realizzati direttamente all'interno del wp-admin, fornendo la query GraphQL tramite un'interfaccia utente, senza dover distribuire alcun codice PHP.
