Đă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, email và url 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, email và url) đượ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).