Arquitectura
ArquitecturaSuscribir campos a tipos

Suscribir campos a tipos

Gato GraphQL utiliza el patrón Publish-subscribe para que los campos se "suscriban" a los tipos, en el que una entidad FieldResolver añade campos a una entidad TypeResolver.

En este ejemplo, la clase UserFieldResolver añade los campos username, email y url a la clase UserTypeResolver, que resuelve el tipo User:

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

El tipo User no sabe de antemano qué campos satisfará, sino que estos (username, email y url) son inyectados en el tipo por el field resolver.

De esta forma, el esquema GraphQL se vuelve fácilmente extensible: simplemente añadiendo un field resolver, cualquier extensión puede añadir nuevos campos a un tipo existente (como el campo User.shippingAddress), o sobrescribir cómo se resuelve un campo (como redefinir User.url para que devuelva el sitio web del usuario en su lugar).