สถาปัตยกรรม
สถาปัตยกรรมการสมัครรับ fields เข้ากับ types

การสมัครรับ fields เข้ากับ types

Gato GraphQL ใช้รูปแบบ Publish-subscribe เพื่อให้ fields ถูก "สมัครรับ" เข้ากับ types โดยที่เอนทิตี FieldResolver จะเพิ่ม fields เข้าสู่เอนทิตี TypeResolver

ในตัวอย่างนี้ คลาส UserFieldResolver เพิ่ม fields username, email และ url เข้ากับคลาส UserTypeResolver ซึ่ง resolve type User:

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

Type User ไม่ทราบล่วงหน้าว่าจะรองรับ fields ใดบ้าง แต่ fields เหล่านี้ (username, email และ url) จะถูกส่งเข้าไปใน type โดย field resolver แทน

ด้วยวิธีนี้ GraphQL schema จึงสามารถขยายได้อย่างง่ายดาย เพียงแค่เพิ่ม field resolver ก็สามารถทำให้ extension ใดก็ตามเพิ่ม fields ใหม่เข้าไปใน type ที่มีอยู่แล้วได้ (เช่น field User.shippingAddress) หรือจะ override วิธีการ resolve field ก็ได้ (เช่น การนิยาม User.url ใหม่ให้คืนค่าเว็บไซต์ของผู้ใช้แทน)