Configurar o schema
Configurar o schemaNamespacing do schema

Namespacing do schema

Faça com que todos os tipos e interfaces adicionados ao schema pelos plugins recebam automaticamente um namespace.

O namespacing do schema evita conflitos de nomes, que ocorrem quando diferentes proprietários (ex.: times diferentes na empresa, ou entre plugins de terceiros) usam o mesmo nome para um tipo ou interface.

Por exemplo, suponha que a empresa "AwesomeWP" tenha o time de Tutoriais e o time de Vendas, e que ambos criem um tipo Product para o schema GraphQL da empresa, gerando um conflito.

Aplicando o namespacing ao schema, os dois tipos seriam automaticamente convertidos em AwesomeWPTutorialsProduct e AwesomeWPSalesProduct, evitando o conflito sem precisar modificar o schema manualmente nem fazer com que os times interajam entre si.

As entidades do modelo de dados do WordPress não recebem namespace

O modelo de dados do WordPress é considerado canônico, e seus tipos de schema GraphQL (como Post e User) e interfaces (como Commentable e WithMeta) não recebem namespace.

Namespacing do schema nos endpoints

Há 2 níveis nos quais podemos definir se o schema receberá namespace ou não. Em ordem de prioridade:

1. Na configuração do schema

O namespacing do schema para um custom endpoint ou persisted query pode ser definido por meio da configuração de schema correspondente:

Namespacing, definido na configuração do schema

2. Modo padrão, definido nas Configurações

Se a configuração do schema tiver o valor "Default", o modo definido nas Configurações será utilizado:

Namespacing nas Configurações
Namespacing nas Configurações

Visualizando o schema com namespace

Use o cliente Voyager para visualizar o schema com namespace.

Quando o namespacing está desabilitado, o schema do WordPress tem esta aparência:

Schema interativo

Quando está habilitado, os tipos e interfaces adicionados pelos plugins recebem namespace e ficam assim:

Schema interativo com namespace

Consultando nomes de tipos (sem) namespace

Uma vez habilitado o namespacing, os tipos podem ser consultados usando tanto o nome com namespace quanto o nome sem namespace. Portanto, apenas as queries que envolvem tipos conflitantes precisam ser editadas, não todas elas.

Por exemplo, se o time de Vendas da AwesomeWP também tiver um tipo Discount, uma query que solicita esse nome de tipo ainda funciona:

query {
  discounts {
    ...DiscountProps
  }
}
 
fragment DiscountProps on Discount {
  price
  dateRange
}

Apenas o tipo conflitante Product deve ser atualizado para AwesomeWPSalesProduct na query, de modo a remover qualquer ambiguidade:

query {
  products {
    ...ProductProps
  }
}
 
fragment ProductProps on AwesomeWPSalesProduct {
  price
  dateRange
}

Especificação GraphQL

Esta funcionalidade atualmente não faz parte da especificação GraphQL, mas foi solicitada em: