Kiến trúc
Kiến trúcĐăng ký trường vào kiểu

Đăng ký trường vào kiểu

Gato GraphQL sử dụng mẫu Publish-subscribe để các trường được "đăng ký" vào các kiểu, trong đó một thực thể FieldResolver có các trường được thêm vào một thực thể TypeResolver.

Trong ví dụ này, lớp UserFieldResolver thêm các trường username, emailurl vào lớp UserTypeResolver, lớp này phân giải kiểu User:

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

Kiểu User không biết trước những trường nào nó sẽ đáp ứng, mà những trường đó (username, emailurl) được đưa vào kiểu bởi field resolver.

Theo cách này, schema GraphQL trở nên dễ dàng mở rộng: chỉ cần thêm một field resolver, bất kỳ tiện ích mở rộng nào cũng có thể thêm các trường mới vào một kiểu hiện có (chẳng hạn như trường User.shippingAddress), hoặc ghi đè cách một trường được phân giải (chẳng hạn như định nghĩa lại User.url để trả về trang web của người dùng).