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).