Architektura
ArchitekturaSubskrybowanie pól do typów

Subskrybowanie pól do typów

Gato GraphQL wykorzystuje wzorzec Publish-subscribe, aby pola były „subskrybowane" do typów, w którym encja FieldResolver dodaje pola do encji TypeResolver.

W tym przykładzie klasa UserFieldResolver dodaje pola username, email i url do klasy UserTypeResolver, która rozwiązuje typ User:

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

Typ User nie wie z góry, które pola będzie obsługiwać, ale te (username, email i url) są zamiast tego wstrzykiwane do typu przez field resolver.

W ten sposób schemat GraphQL staje się łatwo rozszerzalny: poprzez proste dodanie field resolvera dowolne rozszerzenie może dodawać nowe pola do istniejącego typu (np. pole User.shippingAddress) lub zmienić sposób rozwiązywania pola (np. redefiniując User.url, aby zwracało witrynę użytkownika).