🚀 Rilasciata la nuova versione 0.8 di Gato GraphQL!
La versione 0.8 di Gato GraphQL è ora disponibile per il download! 🎉
Si tratta di una versione importante, che si concentra su tre aree:
- Refactoring del codice per abilitare le estensioni
- Maggiore conformità alla specifica GraphQL
- Completamento dello schema GraphQL
Inoltre, supporta il nuovo WordPress 5.8 e contiene numerose correzioni di bug e miglioramenti.
Si noti che questa versione contiene modifiche non retrocompatibili!
Di seguito le note di rilascio. Link rapidi:
- Supporto per WordPress 5.8
- Supporto migliorato per PHP 8.0
- Codice semplificato, utilizzando i container services ovunque
- La cache viene salvata sotto
wp-content - È stato introdotto un endpoint GraphQL a "schema fisso" per alimentare l'editor di WordPress
- Ulteriore supporto dei tipi di campo nello schema
- Input coercion: accettare un valore singolo quando è attesa una lista
- Schema WordPress ulteriormente completato
- Aggiunta di campi admin "unrestricted" allo schema GraphQL
- Introduzione del tipo scalare
AnyScalar - Settings in formato lungo
- Modifiche non retrocompatibili
- Roadmap futura
- Hai riscontrato problemi?
Supporto per WordPress 5.8
WordPress 5.8 deprecata diversi filter hooks, tra cui allowed_block_types e block_categories (utilizzati da questo plugin).
Gli hook interessati sono stati sostituiti:
allowed_block_types=>allowed_block_types_allblock_categories=>block_categories_all
Supporto migliorato per PHP 8.0
Questa versione corregge alcuni problemi durante l'utilizzo di PHP 8.0.
Codice semplificato, utilizzando i container services ovunque
Il codice del server GraphQL è stato refattorizzato per utilizzare un service container per registrare tutti gli elementi dello schema (type resolvers, field resolvers, interface resolvers, custom scalar resolvers e altri).
Si tratta di una pietra miliare, che introduce un approccio unico per sviluppare il plugin e le sue estensioni, semplificando notevolmente il loro codice e la loro documentazione.
La documentazione su come creare estensioni personalizzate per Gato GraphQL può finalmente essere scritta. Il lavoro su di essa inizierà presto e sarà pubblicato nella sezione guide.
La cache viene salvata sotto wp-content
Il plugin memorizza in cache i risultati su disco per ottimizzare le prestazioni.
I file memorizzati in cache erano precedentemente conservati in una cartella di sistema, fuori dalla vista dell'utente amministratore. D'ora in poi, vengono conservati sotto wp-content/graphql-api/cache/.
È stato introdotto un endpoint GraphQL a "schema fisso" per alimentare l'editor di WordPress
Ora ci sono 2 endpoint nel wp-admin:
GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINTGRAPHQL_API_ADMIN_FIXEDSCHEMA_ENDPOINT
Con GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINT, lo schema GraphQL viene modificato dalle preferenze dell'utente, come essere sotto namespace o meno, avere tipi/direttive abilitati o meno, e altre.
Con GRAPHQL_API_ADMIN_FIXEDSCHEMA_ENDPOINT, lo schema GraphQL non viene modificato dalle preferenze dell'utente, esponendo sempre tutti i tipi, campi e direttive, inclusi i campi admin "unrestricted".
L'endpoint fisso consente ai blocchi Gutenberg di interrogare tutti i campi, indipendentemente dal fatto che siano abilitati o meno dall'utente, e con accesso senza restrizioni.
Ulteriore supporto dei tipi di campo nello schema
Il supporto per le liste come tipi di campo è stato ampliato, supportando ora le seguenti funzionalità :
- Liste con elementi non nulli:
[String!] - Liste di liste:
[[String]] - Qualsiasi combinazione di esse:
[[String!]!]
Input coercion: accettare un valore singolo quando è attesa una lista
Ora possiamo inserire un valore singolo nella query GraphQL dove è attesa una lista, come definito nella specifica GraphQL.
Ad esempio, queste query sono ora equivalenti:
query InputSingleValue {
posts(filter: { ids: 1 }) {
title
}
}
query InputListOfSingleItem {
posts(filter: { ids: [1] }) {
title
}
}Schema WordPress ulteriormente completato
Sono state aggiunte allo schema GraphQL ulteriori entità del modello di dati di WordPress:

Vediamo quali nuovi elementi sono stati aggiunti.
Categorie
Le categorie sono state mappate, tramite il nuovo tipo PostCategory, e i nuovi campi:
Root.postCategories: [PostCategory]Root.postCategory: PostCategoryPost.categories: [PostCategory]
Ad esempio, questa query recupera le categorie dei post:
{
posts {
id
title
categories {
id
name
url
}
}
}È stato aggiunto anche un campo mutation, per assegnare categorie ai post:
MutationRoot.setCategoriesOnPost: Post
Ed è stato aggiunto un input categories ai campi mutation per i post:
MutationRoot.createPostMutationRoot.updatePostPost.update(quando le nested mutations sono abilitate)
Meta
I valori meta di custom post, utente, commento e tassonomia possono ora essere interrogati, tramite i nuovi campi:
Post.metaValue: AnyScalarPost.metaValues: [AnyScalar]User.metaValue: AnyScalarUser.metaValues: [AnyScalar]Comment.metaValue: AnyScalarComment.metaValues: [AnyScalar]PostCategory.metaValue: AnyScalarPostCategory.metaValues: [AnyScalar]PostTag.metaValue: AnyScalarPostTag.metaValues: [AnyScalar]
Ad esempio, questa query recupera il meta last_name per gli utenti:
{
users {
id
lastName: metaValue(key: "last_name")
}
}Poiché i valori meta possono essere qualsiasi cosa (string, integer, float o boolean), sono stati mappati tramite il nuovo tipo scalare generico AnyScalar.
I valori meta possono essere pubblici o privati. Le meta keys che possono essere interrogate devono essere configurate esplicitamente nella pagina delle impostazioni:

Per impostazione predefinita, l'elenco delle meta keys consentite è vuoto.
Menus
I menu sono stati mappati, tramite il nuovo tipo Menu, e il nuovo campo Root.menu.
{
menu(by: { id: 176 }) {
itemDataEntries
}
}Settings
Le impostazioni del sito (memorizzate nella tabella wp_options) possono essere interrogate tramite il nuovo campo Root.option: AnyScalar.
Ad esempio, questa query recupera il nome del sito:
{
siteName: optionValue(name: "blogname")
}Le opzioni accessibili devono essere configurate esplicitamente nella pagina delle impostazioni:

Per impostazione predefinita, solo le seguenti opzioni possono essere interrogate:
"home""blogname""blogdescription"
User posts
Gli utenti che hanno effettuato l'accesso possono recuperare i propri post, per qualsiasi stato (publish, pending, draft o trash), tramite i nuovi campi:
Root.myPosts: [Post]Root.myPostCount: IntRoot.myPost: Post
Ad esempio, ora possiamo eseguire questa query:
# Log yourself in first
mutation LogIn {
loginUser(usernameOrEmail: "test", password: "pass") {
id
name
}
}
# Then retrieve your posts
query GetMyPosts {
myPosts {
id
title
url
status
author {
name
}
}
}Aggiunta di campi admin "unrestricted" allo schema GraphQL
Lo schema GraphQL deve trovare un equilibrio tra campi pubblici e privati, al fine di evitare di esporre informazioni private in un'API pubblica.
Il nuovo modulo Schema for the Admin aggiunge campi admin "unrestricted" allo schema GraphQL, che possono esporre dati privati:
Root:
unrestrictedPostunrestrictedPostsunrestrictedPostCountunrestrictedCustomPostunrestrictedCustomPostsunrestrictedCustomPostCountunrestrictedGenericCustomPostunrestrictedGenericCustomPostsunrestrictedGenericCustomPostCountunrestrictedPageunrestrictedPagesunrestrictedPageCountunrestrictedUsersrolescapabilities
User:
unrestrictedPostsunrestrictedPostCountunrestrictedCustomPostsunrestrictedCustomPostCountrolescapabilities
PostCategory:
unrestrictedPostsunrestrictedPostCount
PostTag:
unrestrictedPostsunrestrictedPostCount
Ad esempio, per accedere ai dati dei post, attualmente abbiamo il campo posts, che espone solo i dati pubblici, recuperando i post pubblicati.
D'ora in poi, possiamo accedere ai dati dei post anche tramite il campo unrestrictedPosts, che espone dati pubblici e privati, recuperando i post con qualsiasi stato ("publish", "draft", "pending", "trash").
{
unrestrictedPosts(status: [draft, pending]) {
id
title
status
author {
id
name
}
}
}Introduzione del tipo scalare AnyScalar
Il tipo scalare AnyScalar rappresenta uno qualsiasi degli scalari integrati (String, Int, Boolean, Float o ID).
Viene utilizzato sui campi option e metaValue(s) appena introdotti, perché non conosciamo in anticipo il tipo dei dati restituiti, e l'unione dei tipi scalari non è ancora supportata dalla specifica GraphQL.
Settings in formato lungo
Le opzioni nella pagina Settings sono divise per schede. Da v0.8 è anche possibile visualizzarle tutte insieme in un'unica pagina lunga.
Per abilitare questo comportamento, deseleziona la voce "Have all options in this Settings page be organized under tabs, one tab per module." nelle Settings, e premi su "Save Changes":

Quindi, tutte le impostazioni verranno mostrate insieme in formato lungo:

Modifiche non retrocompatibili
La versione v0.8 produce modifiche non retrocompatibili con la versione precedente.
Modifiche non retrocompatibili di configurazione
I seguenti CPT hanno avuto il loro blocco "Options" ricostruito:
- Schema Configurations
- Custom Endpoints
- Persisted Queries
Nella precedente v0.7, un singolo blocco Options per queste entità conteneva molti elementi di configurazione. Da v0.8, questo blocco è stato disaccoppiato in diversi blocchi indipendenti, ciascuno contenente la propria configurazione.
Ad esempio, in v0.7, (oltre ad abilitare/disabilitare l'endpoint) il blocco Custom Endpoint Options consentiva di configurare i client GraphiQL e Interactive Schema:

Da v0.8, questa configurazione viene aggiunta tramite i blocchi GraphiQL e Interactive Schema:

La configurazione memorizzata nei blocchi Options per tutti e 3 i CPT non viene migrata automaticamente al nuovo formato. Pertanto, prima di aggiornare a v0.8, ti preghiamo di annotare la tua configurazione memorizzata e di replicarla dopo l'aggiornamento alla nuova versione.
Ci scusiamo per l'inconveniente.
Inoltre, dovrai fare clic sul pulsante "Reset the template" mostrato nell'editor di WordPress, per tutte le voci dei 3 CPT.

Direttive non standard rimosse
Le direttive non standard sono state rimosse dal plugin:
@default@removeIfNull@export
Moduli rimossi
I seguenti moduli sono stati rimossi dal plugin:
- Field Deprecation
- Configuration Cache
- Schema Cache
- Multiple Query Execution
- Proactive Feedback
- Schema Editing Access
- Embeddable fields
Roadmap futura
Ora che v0.8 è stata rilasciata, possiamo iniziare a pianificare la strada da percorrere.
Il piano attuale è il seguente:
Rilasciare v0.9 a settembre 2021, includendo:
- Custom scalars
- Uno schema GraphQL aggiornato, utilizzando custom scalars ove appropriato (es:
Post.daterestituirà il tipoDateinvece diString) - Ulteriori miglioramenti per supportare le estensioni
E poi, rilasciare v1.0 verso la fine dell'anno o all'inizio del 2022, includendo:
- Una demo di un plugin di estensione
- Guide di documentazione complete sulla creazione di estensioni
- Lancio del plugin Gato GraphQL su
wp.org
Per ricevere notifiche sullo stato attuale, puoi iscriverti alla newsletter.
Hai riscontrato problemi?
Se hai qualche problema nell'installazione o nell'esecuzione di v0.8, crea una issue nel repository.