Архитектура
АрхитектураПодписка полей на типы

Подписка полей на типы

Gato GraphQL использует паттерн «Публикация-подписка», чтобы поля были «подписаны» на типы: сущность FieldResolver добавляет поля к некоторой сущности TypeResolver.

В этом примере класс UserFieldResolver добавляет поля username, email и url к классу UserTypeResolver, который разрешает тип User:

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

Тип User заранее не знает, какие поля он будет обслуживать; вместо этого поля (username, email и url) внедряются в тип через field resolver.

Таким образом, схема GraphQL становится легко расширяемой: просто добавив field resolver, любое расширение может добавить новые поля к существующему типу (например, поле User.shippingAddress) или переопределить способ разрешения поля (например, переопределив User.url, чтобы оно возвращало сайт пользователя).