スキーマの設定
スキーマの設定'self'フィールドのクエリ

'self'フィールドのクエリ

レスポンスの形状を変更して、別のGraphQLサーバーやREST APIと同じレスポンスをエミュレートしなければならない場合があります。

これは、GraphQLスキーマのすべての型に追加されたselfフィールドを使って実現できます。このフィールドは、適用されたオブジェクト自身をそのまま返します。

type QueryRoot {
  self: QueryRoot!
}
 
type Post {
  self: Post!
}
 
type User {
  self: User!
}

仕組み

selfフィールドを使うと、クエリ対象のオブジェクトを離れることなく、クエリに余分なレベルを追加できます。次のクエリを実行すると:

{
  __typename
  self {
    __typename
  }
  
  post(by: {id: 1}) {
    self {
      id
      __typename
    }
  }
  
  user(by: {id: 1}) {
    self {
      id
      __typename
    }
  }
}

...次のレスポンスが返されます。

{
  "data": {
    "__typename": "QueryRoot",
    "self": {
      "__typename": "QueryRoot"
    },
    "post": {
      "self": {
        "id": 1,
        "__typename": "Post"
      }
    },
    "user": {
      "self": {
        "id": 1,
        "__typename": "User"
      }
    }
  }
}

使い方

selfを使ってレスポンスに必要な余分なレベルを人工的に追加し、フィールドエイリアスを使ってそれらのレベルに適切な名前を付けます。

たとえば、次のクエリは別のGraphQLサーバーの形状を再現します。

{
  categories: self {
    edges: postCategories {
      node: self {
        name
        slug
      }
    }
  }
}

次のクエリはWP REST APIの形状を再現します。

{
  post(by: {id: 1}) {
    content: self {
      rendered: content
    }
  }
}

エンドポイントへのselfフィールドの追加

スキーマへのselfフィールドの追加は、優先順位の高い順に次のように設定できます。

✅ スキーマ設定で定義された、カスタムエンドポイントまたはpersisted queryの固有モード

Adding self fields to the schema, set in the Schema configuration

✅ 設定で定義されたデフォルトモード

スキーマ設定の値が"Default"の場合、設定で定義されたモードが使用されます。

スキーマ設定のselfフィールドを設定(設定画面内)
スキーマ設定のselfフィールドを設定(設定画面内)

使用するタイミング

selfフィールドは、別のGraphQLサーバーやREST APIのような特定の要求された形状に合わせて、GraphQLレスポンスの形状を適応させるために使用できます。