🚀 Nieuwe versie 0.8 van Gato GraphQL uitgebracht!
Versie 0.8 van Gato GraphQL is nu beschikbaar om te downloaden! 🎉
Dit is een enorme release, die zich richt op drie gebieden:
- Refactoring van de codebase om extensies mogelijk te maken
- Verdere naleving van de GraphQL-specificatie
- Voltooiing van het GraphQL-schema
Daarnaast ondersteunt het het nieuwe WordPress 5.8 en bevat het tal van bugfixes en verbeteringen.
Let op: deze release bevat breaking changes!
Hieronder staan de release notes. Snelkoppelingen:
- Ondersteuning voor WordPress 5.8
- Verbeterde ondersteuning voor PHP 8.0
- Vereenvoudigde codebase, met container services overal
- Cache wordt opgeslagen onder
wp-content - Een GraphQL-endpoint met "vast schema" werd geïntroduceerd voor de WordPress-editor
- Verdere ondersteuning van veldtypen in het schema
- Input coercion: een enkele waarde accepteren wanneer een lijst wordt verwacht
- Verdere voltooiing van het WordPress-schema
- Onbeperkte admin-velden toegevoegd aan het GraphQL-schema
- Scalair type
AnyScalargeïntroduceerd - Instellingen in lang formaat
- Breaking changes
- Aankomende roadmap
- Problemen ondervonden?
Ondersteuning voor WordPress 5.8
WordPress 5.8 markeert verschillende filter hooks als verouderd, waaronder allowed_block_types en block_categories (gebruikt door deze plugin).
De betreffende hooks zijn vervangen:
allowed_block_types=>allowed_block_types_allblock_categories=>block_categories_all
Verbeterde ondersteuning voor PHP 8.0
Deze release verhelpt een aantal problemen bij het gebruik van PHP 8.0.
Vereenvoudigde codebase, met container services overal
De codebase van de GraphQL-server is gerefactord om een service container te gebruiken voor het registreren van alle elementen voor het schema (type resolvers, field resolvers, interface resolvers, custom scalar resolvers en andere).
Dit is een mijlpaal die een enkele aanpak introduceert voor het ontwikkelen van de plugin en zijn extensies, waardoor hun code en documentatie aanzienlijk worden vereenvoudigd.
Documentatie over het maken van aangepaste extensies voor Gato GraphQL kan eindelijk worden geschreven. Werk hieraan zal binnenkort beginnen en wordt gepubliceerd in de gidsen-sectie.
Cache wordt opgeslagen onder wp-content
De plugin slaat resultaten op schijf op om de prestaties te optimaliseren.
De gecachte bestanden werden eerder opgeslagen in een systeemmap, buiten het zicht van de beheerder. Voortaan worden ze opgeslagen onder wp-content/graphql-api/cache/.
Een GraphQL-endpoint met "vast schema" werd geïntroduceerd voor de WordPress-editor
Nu zijn er 2 endpoints in de wp-admin:
GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINTGRAPHQL_API_ADMIN_FIXEDSCHEMA_ENDPOINT
Met GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINT wordt het GraphQL-schema aangepast door gebruikersvoorkeuren, zoals het gebruik van naamruimten of niet, het in- of uitschakelen van typen/directives en andere.
Met GRAPHQL_API_ADMIN_FIXEDSCHEMA_ENDPOINT wordt het GraphQL-schema niet aangepast door gebruikersvoorkeuren en worden altijd alle typen, velden en directives blootgesteld, inclusief de "onbeperkte" admin-velden.
Het vaste endpoint stelt Gutenberg-blokken in staat alle velden op te vragen, ongeacht of deze door de gebruiker zijn ingeschakeld of niet, en met onbeperkte toegang.
Verdere ondersteuning van veldtypen in het schema
Ondersteuning voor lijsten als veldtypen is uitgebreid en ondersteunt nu de volgende functies:
- Lijsten met niet-null items:
[String!] - Lijsten van lijsten:
[[String]] - Elke combinatie daarvan:
[[String!]!]
Input coercion: een enkele waarde accepteren wanneer een lijst wordt verwacht
We kunnen nu een enkele waarde invoeren in de GraphQL-query waar een lijst wordt verwacht, zoals gedefinieerd in de GraphQL-spec.
Zo zijn deze queries nu equivalent:
query InputSingleValue {
posts(filter: { ids: 1 }) {
title
}
}
query InputListOfSingleItem {
posts(filter: { ids: [1] }) {
title
}
}Verdere voltooiing van het WordPress-schema
Extra entiteiten uit het WordPress-datamodel zijn toegevoegd aan het GraphQL-schema:

Laten we eens kijken welke nieuwe elementen zijn toegevoegd.
Categorieën
Categorieën zijn in kaart gebracht via het nieuwe type PostCategory en de nieuwe velden:
Root.postCategories: [PostCategory]Root.postCategory: PostCategoryPost.categories: [PostCategory]
Zo haalt deze query de categorieën voor de berichten op:
{
posts {
id
title
categories {
id
name
url
}
}
}Er is ook een mutatie-veld toegevoegd om categorieën aan berichten toe te wijzen:
MutationRoot.setCategoriesOnPost: Post
En een input categories is toegevoegd aan de mutatie-velden voor berichten:
MutationRoot.createPostMutationRoot.updatePostPost.update(wanneer nested mutations zijn ingeschakeld)
Meta
Meta-waarden van custom posts, gebruikers, reacties en taxonomieën kunnen nu worden opgevraagd via de nieuwe velden:
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]
Zo haalt deze query de meta last_name op voor gebruikers:
{
users {
id
lastName: metaValue(key: "last_name")
}
}Omdat meta-waarden van alles kunnen zijn (string, integer, float of boolean), zijn ze in kaart gebracht via het nieuw geïntroduceerde generieke scalaire type AnyScalar.
Meta-waarden kunnen openbaar of privé zijn. Welke meta-sleutels kunnen worden opgevraagd, moet expliciet worden geconfigureerd op de instellingenpagina:

Standaard is de lijst met toegestane meta-sleutels leeg.
Menu's
Menu's zijn in kaart gebracht via het nieuwe type Menu en het nieuwe veld Root.menu.
{
menu(by: { id: 176 }) {
itemDataEntries
}
}Instellingen
De instellingen van de site (opgeslagen in tabel wp_options) kunnen worden opgevraagd via het nieuwe veld Root.option: AnyScalar.
Zo haalt deze query de naam van de site op:
{
siteName: optionValue(name: "blogname")
}Welke opties toegankelijk zijn, moet expliciet worden geconfigureerd op de instellingenpagina:

Standaard kunnen alleen de volgende opties worden opgevraagd:
"home""blogname""blogdescription"
Berichten van gebruikers
Ingelogde gebruikers kunnen hun eigen berichten ophalen, voor elke status (publish, pending, draft of trash), via de nieuwe velden:
Root.myPosts: [Post]Root.myPostCount: IntRoot.myPost: Post
Zo kunnen we nu deze query uitvoeren:
# 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
}
}
}Onbeperkte admin-velden toegevoegd aan het GraphQL-schema
Het GraphQL-schema moet een balans vinden tussen openbare en privé-velden, om te voorkomen dat privé-informatie wordt blootgesteld in een openbare API.
De nieuwe module Schema for the Admin voegt "onbeperkte" admin-velden toe aan het GraphQL-schema, die mogelijk privégegevens kunnen blootstellen:
Root:
unrestrictedPostunrestrictedPostsunrestrictedPostCountunrestrictedCustomPostunrestrictedCustomPostsunrestrictedCustomPostCountunrestrictedGenericCustomPostunrestrictedGenericCustomPostsunrestrictedGenericCustomPostCountunrestrictedPageunrestrictedPagesunrestrictedPageCountunrestrictedUsersrolescapabilities
User:
unrestrictedPostsunrestrictedPostCountunrestrictedCustomPostsunrestrictedCustomPostCountrolescapabilities
PostCategory:
unrestrictedPostsunrestrictedPostCount
PostTag:
unrestrictedPostsunrestrictedPostCount
Om bijvoorbeeld toegang te krijgen tot berichtgegevens, hebben we momenteel het veld posts, dat alleen openbare gegevens blootstelt door gepubliceerde berichten op te halen.
Voortaan kunnen we ook toegang krijgen tot berichtgegevens via het veld unrestrictedPosts, dat zowel openbare als privégegevens blootstelt door berichten met elke status op te halen ("publish", "draft", "pending", "trash").
{
unrestrictedPosts(status: [draft, pending]) {
id
title
status
author {
id
name
}
}
}Scalair type AnyScalar geïntroduceerd
Scalair type AnyScalar vertegenwoordigt een van de ingebouwde scalaire typen (String, Int, Boolean, Float of ID).
Het wordt gebruikt op het nieuw geïntroduceerde veld option en metaValue(s), omdat we van tevoren het type van de geretourneerde gegevens niet kennen, en de samenvoeging van scalaire typen nog niet wordt ondersteund door de GraphQL-spec.
Instellingen in lang formaat
Opties op de pagina Instellingen zijn verdeeld in tabbladen. Vanaf v0.8 is het ook mogelijk om ze allemaal samen op één lange pagina te bekijken.
Om dit gedrag in te schakelen, deselect je het item "Have all options in this Settings page be organized under tabs, one tab per module." in de Instellingen en druk op "Save Changes":

Vervolgens worden alle instellingen samen weergegeven in lang formaat:

Breaking changes
Release v0.8 introduceert breaking changes ten opzichte van de vorige versie.
Configuratie breaking changes
De volgende CPT's hebben hun "Options"-blok opnieuw opgebouwd:
- Schema Configurations
- Custom Endpoints
- Persisted Queries
In de vorige v0.7 bevatte een enkel Options-blok voor deze entiteiten veel configuratie-items. Vanaf v0.8 is dit blok opgesplitst in meerdere onafhankelijke blokken, elk met zijn eigen configuratie.
Zo stond in v0.7 het Custom Endpoint Options-blok (naast het in-/uitschakelen van het endpoint) toe om de GraphiQL- en Interactive Schema-clients te configureren:

Vanaf v0.8 wordt deze configuratie toegevoegd via de GraphiQL- en Interactive Schema-blokken:

De configuratie die is opgeslagen in de Options-blokken voor alle 3 de CPT's wordt niet automatisch gemigreerd naar het nieuwe formaat. Noteer daarom voor de upgrade naar v0.8 je opgeslagen configuratie en repliceer deze na de upgrade naar de nieuwe versie.
Excuses voor dit ongemak.
Daarnaast moet je op de knop "Reset the template" klikken die wordt weergegeven in de WordPress-editor, voor alle vermeldingen voor de 3 CPT's.

Niet-standaard directives verwijderd
De niet-standaard directives zijn verwijderd uit de plugin:
@default@removeIfNull@export
Modules verwijderd
De volgende modules zijn verwijderd uit de plugin:
- Field Deprecation
- Configuration Cache
- Schema Cache
- Multiple Query Execution
- Proactive Feedback
- Schema Editing Access
- Embeddable fields
Aankomende roadmap
Nu v0.8 is uitgebracht, kunnen we beginnen met het plannen van de weg vooruit.
Het huidige plan is als volgt:
v0.9 uitbrengen in september 2021, inclusief:
- Custom scalars
- Een bijgewerkt GraphQL-schema, waarbij custom scalars worden gebruikt waar van toepassing (bijv.:
Post.datezal typeDateretourneren in plaats vanString) - Verdere verbeteringen ter ondersteuning van extensies
En vervolgens v1.0 uitbrengen rond het einde van het jaar of begin 2022, inclusief:
- Een demo van een extensie-plugin
- Volledige documentatiegidsen over het maken van extensies
- Lancering van de Gato GraphQL-plugin op
wp.org
Om meldingen te ontvangen over de huidige status, kun je je aanmelden voor de nieuwsbrief.
Problemen ondervonden?
Als je problemen hebt met het installeren of uitvoeren van v0.8, maak dan een issue aan in de repo.