Arquitetura
ArquiteturaInscrevendo campos em tipos

Inscrevendo campos em tipos

Gato GraphQL utiliza o padrão Publish-subscribe para que os campos sejam "inscritos" em tipos, no qual uma entidade FieldResolver adiciona campos a uma entidade TypeResolver.

Neste exemplo, a classe UserFieldResolver adiciona os campos username, email e url à classe UserTypeResolver, que resolve o tipo User:

class UserFieldResolver extends AbstractDBDataFieldResolver
{
  public static function getClassesToAttachTo(): array
  {
    return [UserTypeResolver::class];
  }
 
  public static function getFieldNamesToResolve(): array
  {
    return [
      'username',
      'email',
      'url',
    ];
  }

O tipo User não sabe antecipadamente quais campos irá satisfazer, mas estes (username, email e url) são injetados no tipo pelo field resolver.

Dessa forma, o schema GraphQL torna-se facilmente extensível: simplesmente adicionando um field resolver, qualquer extensão pode adicionar novos campos a um tipo existente (como o campo User.shippingAddress), ou redefinir como um campo é resolvido (como redefinir User.url para retornar o site do usuário em vez disso).