Arquitetura
ArquiteturaDesacoplamento das queries solicitadas e executáveis

Desacoplamento das queries solicitadas e executáveis

O Gato GraphQL utiliza uma pipeline de directives, uma arquitetura que permite ao mecanismo do servidor resolver, validar e executar a query. Para tornar o mecanismo o mais simples possível, toda ação relacionada à resolução da query ocorre dentro da pipeline, por meio de directives.

A pipeline de directives

Chamar o resolver para validar e resolver um campo, e mesclar sua saída na resposta, é realizado por meio de um par de directives especiais: @validate e @resolveValueAndMerge. Essas directives são de um tipo especial: não são adicionadas pela aplicação (nem na query nem no schema), mas pelo próprio mecanismo. Essas 2 directives são implícitas e são sempre adicionadas, em cada campo de cada query.

A partir dessa estratégia, podemos ver que, ao executar uma query no servidor GraphQL, há na verdade 2 queries envolvidas:

  • A query solicitada
  • A query executável

A query executável, que é a que será eventualmente resolvida pelo servidor, é produzida a partir da aplicação de transformações na query solicitada, entre elas a inclusão das directives @validate e @resolveValueAndMerge para cada campo.

Processo interno no servidor GraphQL

Por exemplo, se a query solicitada for esta:

{
  posts {
    url
    title @uppercase
    content @include(if: $addContent)
  }
}

A query executável será esta:

{
  posts @validate @resolveValueAndMerge {
    url @validate @resolveValueAndMerge
    title @validate @resolveValueAndMerge @uppercase
    content @validate @include(if: $addContent) @resolveValueAndMerge
  }
}

Onde é utilizado

O Gato GraphQL usa esse mecanismo para produzir a query executável nas seguintes circunstâncias: