Alanları Türlere Abone Etme
Gato GraphQL, alanların türlere "abone" olması için Yayımla-Abone Ol desenini kullanır; bu yapıda bir FieldResolver varlığı, belirli bir TypeResolver varlığına alanlar ekler.
Bu örnekte, UserFieldResolver sınıfı User türünü çözen UserTypeResolver sınıfına username, email ve url alanlarını ekler:
class UserFieldResolver extends AbstractDBDataFieldResolver
{
public static function getClassesToAttachTo(): array
{
return [UserTypeResolver::class];
}
public static function getFieldNamesToResolve(): array
{
return [
'username',
'email',
'url',
];
}User türü hangi alanları karşılayacağını önceden bilmez; ancak bu alanlar (username, email ve url) field resolver tarafından türe enjekte edilir.
Bu sayede GraphQL şeması kolayca genişletilebilir hale gelir: yalnızca bir field resolver ekleyerek herhangi bir uzantı, mevcut bir türe yeni alanlar ekleyebilir (örneğin User.shippingAddress alanı) ya da bir alanın nasıl çözüldüğünü değiştirebilir (örneğin User.url'yi kullanıcının web sitesini döndürecek şekilde yeniden tanımlayarak).