Persisted Queries
Persisted QueriesPersisted Queries

Persisted Queries

Included in the “Power Extensions” bundle

Usa le query GraphQL per creare endpoint predefiniti come in REST, ottenendo i vantaggi di entrambe le API.

Descrizione

Con REST, crei più endpoint, ognuno dei quali restituisce un insieme predefinito di dati.

VantaggiSvantaggi
✅ È semplice❌ È tedioso creare tutti gli endpoint
✅ Accessibile via GET o POST❌ Un progetto può incontrare colli di bottiglia in attesa che gli endpoint siano pronti
✅ Può essere messo in cache sul server o sulla CDN❌ Produrre la documentazione è obbligatorio
✅ È sicuro: vengono esposti solo i dati previsti❌ Può essere lento (soprattutto per le app mobili), poiché l'applicazione potrebbe aver bisogno di più richieste per recuperare tutti i dati

Con GraphQL, fornisci qualsiasi query a un singolo endpoint, che restituisce esattamente i dati richiesti.

VantaggiSvantaggi
✅ Nessun sotto/sovra-recupero di dati❌ Accessibile solo via POST
✅ Può essere veloce, poiché tutti i dati vengono recuperati in una singola richiesta❌ Non può essere messo in cache sul server o sulla CDN, rendendolo più lento e più costoso
✅ Permette un'iterazione rapida del progetto❌ Può richiedere di reinventare la ruota, come per l'upload di file o la messa in cache
✅ Può essere auto-documentato❌ Deve affrontare complessità aggiuntive, come il problema N+1
✅ Fornisce un editor per la query (GraphiQL) che semplifica il compito 

Le persisted queries combinano questi 2 approcci:

  • Usano GraphQL per creare e risolvere le query
  • Ma invece di esporre un singolo endpoint, espongono ogni query predefinita sotto il proprio endpoint

Così, otteniamo più endpoint con dati predefiniti, come in REST, ma creati con GraphQL, ottenendo i vantaggi di ciascuno ed evitando i loro svantaggi:

VantaggiSvantaggi
✅ Accessibile via GET o POST❌ È tedioso creare tutti gli endpoint
✅ Può essere messo in cache sul server o sulla CDN❌ Un progetto può incontrare colli di bottiglia in attesa che gli endpoint siano pronti
✅ È sicuro: vengono esposti solo i dati previsti❌ Produrre la documentazione è obbligatorio
✅ Nessun sotto/sovra-recupero di dati❌ Può essere lento (soprattutto per le app mobili), poiché l'applicazione potrebbe aver bisogno di più richieste per recuperare tutti i dati
✅ Può essere veloce, poiché tutti i dati vengono recuperati in una singola richiesta❌ Accessibile solo via POST
✅ Permette un'iterazione rapida del progetto❌ Non può essere messo in cache sul server o sulla CDN, rendendolo più lento e più costoso
✅ Può essere auto-documentato❌ Può richiedere di reinventare la ruota, come per l'upload di file o la messa in cache
✅ Fornisce un editor per la query (GraphiQL) che semplifica il compito❌ Deve affrontare complessità aggiuntive, come il problema N+1 👈🏻 questo problema è risolto dal motore sottostante

Editor di persisted query

Esecuzione della Persisted Query

Una volta pubblicata la persisted query, possiamo eseguirla tramite il suo permalink.

La persisted query può essere eseguita direttamente nel browser, poiché è accessibile via GET, e otterremo i dati richiesti in formato JSON:

Esecuzione di una persisted query nel browser

Creazione di una Persisted Query

Cliccando sul link Persisted Queries nel menu, viene visualizzato l'elenco di tutte le persisted queries create:

Persisted queries con descrizione
Persisted queries con descrizione

Una persisted query è un custom post type (CPT). Per creare una nuova persisted query, clicca sul pulsante "Aggiungi una nuova persisted query GraphQL", che aprirà l'editor di WordPress:

Creazione di una nuova Persisted Query

L'input principale è il client GraphiQL, che è fornito con l'Explorer per impostazione predefinita. Cliccare sui campi nel pannello laterale sinistro li aggiunge alla query, e cliccare sul pulsante "Run" esegue la query:

GraphiQL Explorer

Quando la query è pronta, pubblicala, e il suo permalink diventa il suo endpoint. Il link all'endpoint (e alla sorgente) è mostrato nel pannello laterale "Pagina principale dell'Endpoint di Persisted Query":

Pagina principale dell'Endpoint di Persisted Query

Aggiungendo ?view=source al permalink, verranno mostrate la persisted query e la sua configurazione (a condizione che l'utente sia connesso e che il suo ruolo abbia accesso):

Sorgente della persisted query

Per impostazione predefinita, l'endpoint della persisted query ha il percorso /graphql-query/, e questo valore è configurabile tramite le Impostazioni:

Impostazioni della Persisted query
Impostazioni della Persisted query

Configurazione dello schema

La definizione di quali elementi contiene lo schema, e di quale accesso vi avranno gli utenti, è definita nella configurazione dello schema.

Quindi dobbiamo creare una configurazione dello schema, e poi selezionarla dal menu a tendina:

Selezione della configurazione dello schema

Organizzazione delle Persisted Queries per categoria

Nel pannello laterale "Categorie di endpoint" possiamo aggiungere categorie per aiutare a gestire la Persisted Query:

Categorie di endpoint durante la modifica di una Persisted Query

Ad esempio, possiamo creare categorie per gestire gli endpoint per cliente, applicazione, o qualsiasi altra informazione necessaria:

Elenco delle categorie di endpoint

Nell'elenco delle Persisted Queries, possiamo visualizzare le loro categorie e, cliccando su qualsiasi link di categoria, o usando il filtro in alto, verranno mostrate solo le voci di quella categoria:

Elenco delle Persisted Queries con le loro categorie

Persisted queries private

Impostando lo stato della Persisted Query su private, l'endpoint può essere accessibile solo dall'utente amministratore. Questo evita che i nostri dati vengano condivisi involontariamente con utenti che non dovrebbero avervi accesso.

Ad esempio, possiamo creare Persisted Queries private per aiutare a gestire l'applicazione, come il recupero di dati per creare report con le nostre metriche.

Persisted Query privata

Persisted queries protette da password

Se creiamo una Persisted Query per un cliente specifico, possiamo assegnarle una password, per fornire un livello di sicurezza aggiuntivo e fare in modo che solo quel cliente acceda all'endpoint.

Persisted Query protetta da password

Al primo accesso a una persisted query protetta da password, ci troviamo davanti a una schermata che richiede la password:

Persisted Query protetta da password: Primo accesso

Una volta fornita e validata la password, solo allora l'utente accederà all'endpoint previsto.

Rendere la persisted query dinamica tramite parametri URL

Il valore di ciascuna variabile può essere impostato tramite un parametro URL (con il nome della variabile) durante l'esecuzione della persisted query. Se l'opzione "I parametri URL sovrascrivono le variabili?" è abilitata, allora il parametro URL avrà la priorità. Altrimenti, avrà la priorità il valore definito nel dizionario delle variabili (se presente).

Ad esempio, in questa query, il numero di risultati è controllato tramite la variabile $limit, con un valore predefinito di 3:

Uso delle variabili nella persisted query

Durante l'esecuzione di questa persisted query, passare ?limit=5 eseguirà la query restituendo invece 5 risultati:

Sovrascrittura del valore delle variabili nella persisted query