アーキテクチャ
アーキテクチャフィールドをタイプに登録する

フィールドをタイプに登録する

Gato GraphQLはPublish-subscribeパターンを使用して、フィールドをタイプに「登録」します。このパターンでは、FieldResolverエンティティが特定のTypeResolverエンティティにフィールドを追加します。

この例では、クラスUserFieldResolverがフィールドusernameemailurlをクラスUserTypeResolverに追加しており、UserTypeResolverはタイプUserを解決します。

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

Userタイプは、どのフィールドを満たすかを事前に知っているわけではありません。usernameemailurlといったフィールドは、field resolverによってタイプに注入されます。

このようにして、GraphQLスキーマは容易に拡張可能になります。field resolverを追加するだけで、任意の拡張機能が既存のタイプに新しいフィールドを追加したり(例:フィールドUser.shippingAddressの追加)、フィールドの解決方法をオーバーライドしたりすることができます(例:User.urlを再定義してユーザーのウェブサイトを返すようにする)。