Architettura
ArchitetturaIscrivere i campi ai tipi

Iscrivere i campi ai tipi

Gato GraphQL utilizza il pattern Publish-subscribe affinché i campi siano "iscritti" ai tipi, in cui un'entità FieldResolver aggiunge dei campi a un'entità TypeResolver.

In questo esempio, la classe UserFieldResolver aggiunge i campi username, email e url alla classe UserTypeResolver, che risolve il tipo User:

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

Il tipo User non sa in anticipo quali campi soddisferà, ma questi (username, email e url) vengono invece iniettati nel tipo dal field resolver.

In questo modo, lo schema GraphQL diventa facilmente estensibile: aggiungendo semplicemente un field resolver, qualsiasi estensione può aggiungere nuovi campi a un tipo esistente (come il campo User.shippingAddress), oppure ridefinire il modo in cui un campo viene risolto (come ridefinire User.url per restituire il sito web dell'utente al suo posto).