Architecture
ArchitectureAbonner des champs aux types

Abonner des champs aux types

Gato GraphQL utilise le patron Publish-subscribe pour que les champs soient « abonnés » aux types, dans lequel une entité FieldResolver ajoute des champs à une entité TypeResolver.

Dans cet exemple, la classe UserFieldResolver ajoute les champs username, email et url à la classe UserTypeResolver, qui résout le type User :

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

Le type User ne sait pas à l'avance quels champs il satisfera, mais ceux-ci (username, email et url) sont au contraire injectés dans le type par le field resolver.

De cette façon, le schéma GraphQL devient facilement extensible : en ajoutant simplement un field resolver, n'importe quelle extension peut ajouter de nouveaux champs à un type existant (comme le champ User.shippingAddress), ou redéfinir la façon dont un champ est résolu (comme redéfinir User.url pour retourner le site web de l'utilisateur à la place).