Iscrivere i campi ai tipi
Gato GraphQL utilizza il pattern Publish-subscribe affinché i campi siano "iscritti" ai tipi, in cui un'entità FieldResolver aggiunge dei campi a un'entità TypeResolver.
In questo esempio, la classe UserFieldResolver aggiunge i campi username, email e url alla classe UserTypeResolver, che risolve il tipo User:
class UserFieldResolver extends AbstractDBDataFieldResolver
{
public static function getClassesToAttachTo(): array
{
return [UserTypeResolver::class];
}
public static function getFieldNamesToResolve(): array
{
return [
'username',
'email',
'url',
];
}Il tipo User non sa in anticipo quali campi soddisferà, ma questi (username, email e url) vengono invece iniettati nel tipo dal field resolver.
In questo modo, lo schema GraphQL diventa facilmente estensibile: aggiungendo semplicemente un field resolver, qualsiasi estensione può aggiungere nuovi campi a un tipo esistente (come il campo User.shippingAddress), oppure ridefinire il modo in cui un campo viene risolto (come ridefinire User.url per restituire il sito web dell'utente al suo posto).