スキーマの設定'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の固有モード

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

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