Server GraphQL per WordPress

Gato GraphQL vs WPGraphQL

Confronto tra Gato GraphQL e WPGraphQL

Gato GraphQL vs WPGraphQL
plus image
Gato GraphQL vs 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 GraphQLWPGraphQL
Problema N+1Non è un problema grazie alla progettazione architetturalePuò essere un problema se non gestito; lo sviluppatore deve esserne consapevole
Sicurezza: disabilitazione dell'endpointPuò disabilitare completamente l'endpoint unico con le persisted queries (PRO)Non disponibile
Controllo degli accessiValidazione campo per campo, con ruoli/capacità/IP, tramite UI (PRO)Non a livello di campo, meno granulare
Controllo della cachemax-age calcolato automaticamente per le queries (PRO)Nessun controllo automatico della cache
Endpoint personalizzatiEndpoint multipli, protetti da password/personalizzabili; gerarchia di endpoint supportata (PRO)Endpoint unico, personalizzazione limitata
Aggiornamenti in massa e cerca/sostituisciEliminazione in massa, etichettatura, sostituzione (con regex), tramite GraphQL (PRO)Non disponibile
Funzionalità GraphQL personalizzate/sperimentaliMutazioni annidate, schema namespacing, oneOf input objectPrincipalmente la specifica GraphQL standard
Multiple Query Execution (componibilità)Più queries in un documento, condivisione dello stato con @exportQueries in batch (più per richiesta), ma non possono condividere lo stato
Endpoint interni/privatiEndpoint privato solo per backend/PHP, non esposto agli utenti (PRO)Non disponibile
Mutazione dei dati avanzataRecuperare, modificare e persistere i dati in un singolo documento (PRO)Non supportato
Sincronizzazione e distribuzione dei contenutiImport/export tramite GraphQL, RSS, CSV, REST API (PRO)Non disponibile
Integrazione di servizi webChiamate 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 GraphQLUI di amministrazione più basilare
Batching/componibilitàComposizione di campi/direttive, logica di resolver riutilizzabile (PRO)Non supportato
Multiple Query ExecutionSupportata, con stato condiviso e dipendenzeSupportata, senza condivisione dello stato
Uso headless/statico standardEntrambi sono ugualmente capaciEntrambi 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.

Editor di persisted query
Editor di persisted query

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

Editor della lista di controllo degli accessi
Editor della lista di controllo degli accessi

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

Editor della lista di controllo della cache

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

Endpoint personalizzato protetto da password
Endpoint personalizzato protetto da password

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

Schema interattivo con namespace
Schema interattivo con namespace

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.

Editor delle regole di automazione
Editor delle regole di automazione

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.

Iscriviti alla nostra newsletter

Resta aggiornato su tutte le novità di Gato GraphQL.