🚀 Lançada a nova versão 0.8 do Gato GraphQL!
A versão 0.8 do Gato GraphQL está agora disponível para download! 🎉
Esta é uma versão enorme, que se concentra em três áreas:
- Refatoração do código para habilitar extensões
- Maior conformidade com a especificação GraphQL
- Conclusão do schema GraphQL
Além disso, suporta o novo WordPress 5.8 e contém diversas correções de bugs e melhorias.
Observe que esta versão contém breaking changes!
Abaixo estão as notas de lançamento. Links rápidos:
- Suporte ao WordPress 5.8
- Suporte aprimorado ao PHP 8.0
- Código simplificado, usando container services em todo lugar
- O cache é salvo em
wp-content - Um endpoint GraphQL de "schema fixo" foi introduzido para alimentar o editor do WordPress
- Suporte adicional a tipos de campo no schema
- Input coercion: aceitar um único valor quando uma lista é esperada
- Schema WordPress mais completo
- Adicionados campos admin "unrestricted" ao schema GraphQL
- Introdução do tipo escalar
AnyScalar - Settings em formato longo
- Breaking changes
- Roadmap futuro
- Encontrou problemas?
Suporte ao WordPress 5.8
O WordPress 5.8 deprecou vários filter hooks, incluindo allowed_block_types e block_categories (usados por este plugin).
Os hooks afetados foram substituídos:
allowed_block_types=>allowed_block_types_allblock_categories=>block_categories_all
Suporte aprimorado ao PHP 8.0
Esta versão corrige alguns problemas ao usar PHP 8.0.
Código simplificado, usando container services em todo lugar
O código do servidor GraphQL foi refatorado para usar um service container ao registrar todos os elementos do schema (type resolvers, field resolvers, interface resolvers, custom scalar resolvers e outros).
Este é um marco importante, que introduz uma abordagem única para desenvolver o plugin e suas extensões, simplificando bastante o código e a documentação.
A documentação sobre como criar extensões personalizadas para o Gato GraphQL pode finalmente ser escrita. O trabalho nela começará em breve e será publicado na seção de guias.
O cache é salvo em wp-content
O plugin armazena resultados em cache no disco para otimizar o desempenho.
Os arquivos em cache eram anteriormente armazenados em uma pasta do sistema, fora da visão do usuário administrador. A partir de agora, eles são armazenados em wp-content/graphql-api/cache/.
Um endpoint GraphQL de "schema fixo" foi introduzido para alimentar o editor do WordPress
Agora existem 2 endpoints no wp-admin:
GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINTGRAPHQL_API_ADMIN_FIXEDSCHEMA_ENDPOINT
Com GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINT, o schema GraphQL é modificado pelas preferências do usuário, como ser namespaced ou não, ter tipos/directives habilitados ou não, entre outros.
Com GRAPHQL_API_ADMIN_FIXEDSCHEMA_ENDPOINT, o schema GraphQL não é modificado pelas preferências do usuário, expondo sempre todos os tipos, campos e directives, incluindo os campos admin "unrestricted".
O endpoint fixo permite que os blocos Gutenberg consultem todos os campos, independentemente de estarem habilitados ou não pelo usuário, e com acesso irrestrito.
Suporte adicional a tipos de campo no schema
O suporte para listas como tipos de campo foi expandido, agora suportando os seguintes recursos:
- Listas com itens não nulos:
[String!] - Listas de listas:
[[String]] - Qualquer combinação delas:
[[String!]!]
Input coercion: aceitar um único valor quando uma lista é esperada
Agora podemos inserir um único valor na query GraphQL onde uma lista é esperada, como definido na especificação GraphQL.
Por exemplo, estas queries agora são equivalentes:
query InputSingleValue {
posts(filter: { ids: 1 }) {
title
}
}
query InputListOfSingleItem {
posts(filter: { ids: [1] }) {
title
}
}Schema WordPress mais completo
Entidades adicionais do modelo de dados do WordPress foram adicionadas ao schema GraphQL:

Vamos ver quais novos elementos foram adicionados.
Categorias
As categorias foram mapeadas, por meio do novo tipo PostCategory, e os novos campos:
Root.postCategories: [PostCategory]Root.postCategory: PostCategoryPost.categories: [PostCategory]
Por exemplo, esta query recupera as categorias dos posts:
{
posts {
id
title
categories {
id
name
url
}
}
}Um campo mutation, para atribuir categorias aos posts, também foi adicionado:
MutationRoot.setCategoriesOnPost: Post
E um input categories foi adicionado aos campos mutation para posts:
MutationRoot.createPostMutationRoot.updatePostPost.update(quando nested mutations estão habilitadas)
Meta
Valores meta de custom post, usuário, comentário e taxonomia agora podem ser consultados, por meio dos novos campos:
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]
Por exemplo, esta query recupera o meta last_name para os usuários:
{
users {
id
lastName: metaValue(key: "last_name")
}
}Como os valores meta podem ser qualquer coisa (string, integer, float ou boolean), eles foram mapeados por meio do novo tipo escalar genérico AnyScalar.
Os valores meta podem ser públicos ou privados. As meta keys que podem ser consultadas devem ser configuradas explicitamente na página de configurações:

Por padrão, a lista de meta keys permitidas está vazia.
Menus
Os menus foram mapeados, por meio do novo tipo Menu, e o novo campo Root.menu.
{
menu(by: { id: 176 }) {
itemDataEntries
}
}Settings
As configurações do site (armazenadas na tabela wp_options) podem ser consultadas por meio do novo campo Root.option: AnyScalar.
Por exemplo, esta query recupera o nome do site:
{
siteName: optionValue(name: "blogname")
}As opções que podem ser acessadas devem ser configuradas explicitamente na página de configurações:

Por padrão, apenas as seguintes opções podem ser consultadas:
"home""blogname""blogdescription"
User posts
Usuários autenticados podem recuperar seus próprios posts, para qualquer status (publish, pending, draft ou trash), por meio dos novos campos:
Root.myPosts: [Post]Root.myPostCount: IntRoot.myPost: Post
Por exemplo, agora podemos executar esta 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
}
}
}Adicionados campos admin "unrestricted" ao schema GraphQL
O schema GraphQL deve encontrar um equilíbrio entre campos públicos e privados, a fim de evitar expor informações privadas em uma API pública.
O novo módulo Schema for the Admin adiciona campos admin "unrestricted" ao schema GraphQL, que podem expor dados privados:
Root:
unrestrictedPostunrestrictedPostsunrestrictedPostCountunrestrictedCustomPostunrestrictedCustomPostsunrestrictedCustomPostCountunrestrictedGenericCustomPostunrestrictedGenericCustomPostsunrestrictedGenericCustomPostCountunrestrictedPageunrestrictedPagesunrestrictedPageCountunrestrictedUsersrolescapabilities
User:
unrestrictedPostsunrestrictedPostCountunrestrictedCustomPostsunrestrictedCustomPostCountrolescapabilities
PostCategory:
unrestrictedPostsunrestrictedPostCount
PostTag:
unrestrictedPostsunrestrictedPostCount
Por exemplo, para acessar dados de posts, atualmente temos o campo posts, que expõe apenas dados públicos, buscando posts publicados.
A partir de agora, também podemos acessar dados de posts por meio do campo unrestrictedPosts, que expõe dados públicos e privados, buscando posts com qualquer status ("publish", "draft", "pending", "trash").
{
unrestrictedPosts(status: [draft, pending]) {
id
title
status
author {
id
name
}
}
}Introdução do tipo escalar AnyScalar
O tipo escalar AnyScalar representa qualquer um dos escalares integrados (String, Int, Boolean, Float ou ID).
Ele é usado nos campos option e metaValue(s) recém-introduzidos, pois não conhecemos antecipadamente o tipo dos dados retornados, e a união de tipos escalares ainda não é suportada pela especificação GraphQL.
Settings em formato longo
As opções na página Settings são divididas por abas. A partir da v0.8 também é possível visualizá-las todas juntas em uma única página longa.
Para habilitar este comportamento, desmarque o item "Have all options in this Settings page be organized under tabs, one tab per module." nas Settings, e clique em "Save Changes":

Em seguida, todas as configurações serão exibidas juntas no formato longo:

Breaking changes
A versão v0.8 introduz breaking changes em relação à versão anterior.
Breaking changes de configuração
Os seguintes CPTs tiveram seu bloco "Options" reconstruído:
- Schema Configurations
- Custom Endpoints
- Persisted Queries
Na versão anterior v0.7, um único bloco Options para essas entidades continha muitos itens de configuração. Desde a v0.8, esse bloco foi desacoplado em vários blocos independentes, cada um contendo sua própria configuração.
Por exemplo, na v0.7, (além de habilitar/desabilitar o endpoint) o bloco Custom Endpoint Options permitia configurar os clientes GraphiQL e Interactive Schema:

Desde a v0.8, essa configuração é adicionada por meio dos blocos GraphiQL e Interactive Schema:

A configuração armazenada nos blocos Options para todos os 3 CPTs não é migrada automaticamente para o novo formato. Portanto, antes de atualizar para a v0.8, anote sua configuração armazenada e replique-a após a atualização para a nova versão.
Pedimos desculpas pelo inconveniente.
Além disso, você precisará clicar no botão "Reset the template" exibido no editor do WordPress, para todas as entradas dos 3 CPTs.

Directives não padrão removidas
As directives não padrão foram removidas do plugin:
@default@removeIfNull@export
Módulos removidos
Os seguintes módulos foram removidos do plugin:
- Field Deprecation
- Configuration Cache
- Schema Cache
- Multiple Query Execution
- Proactive Feedback
- Schema Editing Access
- Embeddable fields
Roadmap futuro
Agora que a v0.8 foi lançada, podemos começar a planejar o caminho à frente.
O plano atual é o seguinte:
Lançar a v0.9 em setembro de 2021, incluindo:
- Custom scalars
- Um schema GraphQL atualizado, usando custom scalars quando apropriado (ex:
Post.dateretornará o tipoDateem vez deString) - Melhorias adicionais para suporte a extensões
E então, lançar a v1.0 no final do ano ou no início de 2022, incluindo:
- Uma demonstração de um plugin de extensão
- Guias de documentação completos sobre a criação de extensões
- Lançamento do plugin Gato GraphQL no
wp.org
Para receber notificações sobre o status atual, você pode se inscrever na newsletter.
Encontrou problemas?
Se você tiver algum problema ao instalar ou executar a v0.8, crie uma issue no repositório.