1. クエリをテストする

Delivery APIのクエリ例

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

このトピックでは、一般的なクエリのニーズを満たすためにExperience Edge GraphQLスキーマをクエリする方法の例をいくつか説明します。

大事な

このトピックのクエリ例のほとんどは、スタイルガイド サンプル アプリから派生Sitecore JSSものです。アイテムIDとパスは、インポート/ソリューションによって異なります。

大事な

サイトでフォールバック言語をサポートしている場合は、開始する前にExperience Edge Connectorで 公開言語のフォールバックを有効にします

IDまたはパスでアイテムを取得する

コンテンツ ツリー内の任意の場所にあるアイテムに対してパスまたはIDでクエリを実行し、そのフィールドやその他のプロパティを読み取ることができます。インラインフラグメントを使用して、アイテムを投影データテンプレートタイプにキャストし、フィールドをフィールドタイプにキャストできます。

クエリ

query {
  # path can be an item tree path or GUID-based id
  item(path: "/sitecore/content/Experience-Edge/home", language: "en") {
    # items can be cast to a Template type with inline fragments
    ... on AppRoute {
      pageTitle {
        value
      }
    }
    # fields can be cast to a Field type with inline fragments
    field(name: "pageTitle") {
      ... on TextField {
        value
      }
    }
  }
}

結果

{
  "data": {
    "item": {
      "pageTitle": {
        "value": "Welcome to Sitecore JSS"
      },
      "field": {
        "value": "Welcome to Sitecore JSS"
      }
    }
  }
}

複数のパスでフィルタリングされたアイテムを取得する

複数のパスに基づいてアイテムをフィルタリングできます。このクエリの例では、次のサイト構造を前提としています。

Content tree highlighting the items used in this example.

/home/graphqlアイテムとhome/styleguide/Page ComponentsアイテムのUUIDにそれぞれ0C6F4AAF-DD7E-5FAF-B9B0-61070D496055AB99BA2B-B606-51E3-BAD9-FD8358DE1333があるとします。/home/graphqlhome/styleguide/Page Componentsではない/homeアイテムと子孫、またはその子を取得したいと考えています。次のクエリでは、NCONTAINS演算子を使用して、これらの項目とその子のパスを結果から除外します。

クエリ

query {
  pageOne: search(
     where: {
       AND: [
         {
           name: "_path"
           value: "54C8E9B5-0B2C-5363-8FA6-D32A3A302F51"
           operator: CONTAINS
         }
         {
           AND: [
             {
               name: "_path"
               value: "0C6F4AAF-DD7E-5FAF-B9B0-61070D496055"
               operator: NCONTAINS
             }
             {
               name: "_path"
               value: "AB99BA2B-B606-51E3-BAD9-FD8358DE1333"
               operator: NCONTAINS
             }
           ]
         }
       ]
     }
     # defaults to 10
     first: 10
   ) {
     total
     pageInfo {
       endCursor
       hasNext
     }
     results {
       url {
         path
       }
     }
   }
 }

結果

検索クエリ結果には、パスが /home/graphqlhome/styleguide/Page Componentsのアイテム、またはその子孫は含まれませんが、/homeアイテムと残りの子アイテムが返されます。

{
  "data": {
    "pageOne": {
      "total": 5,
      "pageInfo": {
        "endCursor": "NQ==",
        "hasNext": false
      },
      "results": [
        {
          "url": {
            "path": "/styleguide/custom-route-type"
          }
        },
        {
          "url": {
            "path": "/styleguide"
          }
        },
        {
          "url": {
            "path": "/Page-Components/home-jss-main-ContentBlock-1"
          }
        },
        {
          "url": {
            "path": "/Page-Components"
          }
        },
        {
          "url": {
            "path": "/"
          }
        }
      ]
    }
  }
}

URLの項目レイアウトを取得する

ヘッドレスSDKで最もよく使用されますが、サイト名とHTTP URLでアイテムを検索し、フレームワーク固有のSitecoreプレースホルダー実装でレンダリングするためのレイアウト サービス出力を取得できます。

クエリ

query {
  layout(site: "experienceedge", routePath: "/", language: "en") {
    item {
      rendered
    }
  }
}

結果

{
  "data": {
    "layout": {
      "item": {
        "rendered": {
          "sitecore": {
            "context": {
              "pageEditing": false,
              "site": {
                "name": "experienceedge"
              },
              "pageState": "normal",
              "language": "en",
              "itemPath": "/"
            },
            "route": {
              "name": "home",
              "displayName": "home",
              "fields": {
                "pageTitle": {
                  "value": "Welcome to Sitecore JSS"
                }
              },
              "deviceId": "fe5d7fdf-89c0-4d99-9aa3-b5fbd009c9f3",
              "itemId": "2bde2083-5542-5569-ac5e-f1f42e29f75a",
              "itemLanguage": "en",
              "itemVersion": 1,
              "layoutId": "714096fc-3998-52cf-b87a-951fc7ce39d3",
              "templateId": "e34d8c4f-7e6c-560c-be24-e4d1fcdb16d8",
              "templateName": "AppRoute",
              "placeholders": {
                "jss-main": [
                  {
                    "uid": "2c4a53cc-9da8-5f51-9d79-6ee2fc671b2d",
                    "componentName": "ContentBlock",
                    "dataSource": "{CC3A044C-776B-5423-9BEA-CC5C2EDA8C9B}",
                    "fields": {
                      "heading": {
                        "value": "Welcome to Sitecore JSS"
                      },
                      "content": {
                        "value": "<p>Thanks for using JSS!! Here are some resources to get you started:</p>\n\n<h3><a href=\"https://jss.sitecore.net\" rel=\"noopener noreferrer\">Documentation</a></h3>\n<p>The official JSS documentation can help you with any JSS task from getting started to advanced techniques.</p>\n\n<h3><a href=\"/styleguide\">Styleguide</a></h3>\n<p>The JSS styleguide is a living example of how to use JSS, hosted right in this app.\nIt demonstrates most of the common patterns that JSS implementations may need to use,\nas well as useful architectural patterns.</p>\n\n<h3><a href=\"/graphql\">GraphQL</a></h3>\n<p>JSS features integration with the Sitecore GraphQL API to enable fetching non-route data from Sitecore - or from other internal backends as an API aggregator or proxy.\nThis route is a living example of how to use an integrate with GraphQL data in a JSS app.</p>\n\n<div class=\"alert alert-dark\">\n  <h4>This app is a boilerplate</h4>\n  <p>The JSS samples are a boilerplate, not a library. That means that any code in this app is meant for you to own and customize to your own requirements.</p>\n  <p>Want to change the lint settings? Do it. Want to read manifest data from a MongoDB database? Go for it. This app is yours.</p>\n</div>\n\n<div class=\"alert alert-dark\">\n  <h4>How to start with an empty app</h4>\n  <p>To remove all of the default sample content (the Styleguide and GraphQL routes) and start out with an empty JSS app:</p>\n  <ol>\n    <li>Delete <code>/src/components/Styleguide*</code> and <code>/src/components/GraphQL*</code></li>\n    <li>Delete <code>/sitecore/definitions/components/Styleguide*</code>, <code>/sitecore/definitions/templates/Styleguide*</code>, and <code>/sitecore/definitions/components/GraphQL*</code></li>\n    <li>Delete <code>/data/component-content/Styleguide</code></li>\n    <li>Delete <code>/data/content/Styleguide</code></li>\n    <li>Delete <code>/data/routes/styleguide</code> and <code>/data/routes/graphql</code></li>\n    <li>Delete <code>/data/dictionary/*.yml</code></li>\n  </ol>\n</div>\n"
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      }
    }
  }
}

アイテムバケット内のアイテムをページ分割する

Sitecoreアイテム バケットを使用する場合、一般的な要件は、そのバケット内の特定のテンプレートから派生するすべてのアイテムをページ分割することです。次の検索クエリは、これらのユースケースに役立ちます。

クエリ

fragment bucketItemFields on Item {
  ... on AppRoute {
    pageTitle {
      value
    }
  }
  url {
    path
  }
}

query {
  search(
    where: {
      AND: [
        {
          name: "_templates"
          value: "0929f436c3f3500a9f8bd1c57a67a192"
          operator: CONTAINS
        }
        {
          name: "_path"
          value: "7ab00eca411249818420666fc9110faf"
          operator: CONTAINS
        }
      ]
    }
    first: 5
    orderBy: { name: "pageTitle", direction: ASC }
  ) {
    results {
      ...bucketItemFields
    }
    pageInfo {
      endCursor
      hasNext
    }
    total
  }
}

結果

{
  "data": {
    "search": {
      "results": [
        {
          "pageTitle": {
            "value": "Route A"
          },
          "url": {
            "path": "/bucket/2021/05/13/13/12/Route-A"
          }
        },
        {
          "pageTitle": {
            "value": "Route B"
          },
          "url": {
            "path": "/bucket/2021/05/13/13/12/Route-B"
          }
        },
        {
          "pageTitle": {
            "value": "Route C"
          },
          "url": {
            "path": "/bucket/2021/05/13/13/12/Route-C"
          }
        },
        {
          "pageTitle": {
            "value": "Route D"
          },
          "url": {
            "path": "/bucket/2021/05/13/13/12/Route-D"
          }
        },
        {
          "pageTitle": {
            "value": "Route E"
          },
          "url": {
            "path": "/bucket/2021/05/13/13/13/Route-E"
          }
        }
      ],
      "pageInfo": {
        "endCursor": "NQ==",
        "hasNext": true
      },
      "total": 26
    }
  }
}

サイトのルート項目を取得する

Experience Edgeスキーマでは現在、サイトとそのルート アイテムのクエリは許可されていませんが、layoutクエリを使用してサイトのルート アイテムを検索することはできます。

クエリ

query {
  layout(site: "experienceedge", routePath: "/", language: "en") {
    item {
      homeItemPath: path
      contentRoot: parent {
        id
        path
      }
    }
  }
}

結果

{
  "data": {
    "layout": {
      "item": {
        "homeItemPath": "/sitecore/content/Experience-Edge/home",
        "contentRoot": {
          "id": "5AAA894246145088B7AD604B4D177B39",
          "path": "/sitecore/content/Experience-Edge"
        }
      }
    }
  }
}

すべてのサイトパス/ページを取得する

siteクエリを使用して、そのサイトのレイアウトデータ/プレゼンテーションの詳細を含む特定の言語のすべてのアイテムを検索できます。これは、たとえば、静的サイトジェネレータのパスを取得する場合に役立ちます。ルート結果はページ分割され、デフォルトでは10件の結果のみが返されます。結果をページ分割するには、endCursorプロパティをfirstクエリ引数とafterクエリ引数と共に使用する必要があります。

クエリ

query {
 site {
  siteInfo(site: "example") {
   routes(language: "en") {
    results {
     route{
      id
     }
     routePath
    }
    total
    pageInfo {
     endCursor
     hasNext
    }
   }
  }
 }
}

結果

{
 "data": {
  "site": {
   "siteInfo": {
    "routes": {
     "routesResult": [
      {
       "route": {
        "id": "31FB4D08F5E14B4C9AA4EFE8F486B87D"
       },
       "routePath": "/Page-B"
      },
      {
       "route": {
        "id": "49195BCAB09241A3BC30311F00B7DDC8"
       },
       "routePath": "/Page-A"
      },
      {
       "route": {
        "id": "BCDA1741BF0D4CA695519FEAE634FFFF"
       },
       "routePath": "/"
      }
     ],
     "total": 3,
     "pageInfo": {
      "endCursor": "Mw==",
      "hasNext": false
     }
    }
   }
  }
 }
}

範囲内の日付と数値でフィルター処理されたアイテムを取得する

演算子を使用して、次のような数値と日付をクエリできます。

  • イコール(EQ)

  • 等しくない (NEQ)

  • Contains (CONTAINS) (含む)

  • 含まない (NCONTAINS)

さらに、次の演算子を使用して、数値または日付の範囲をクエリできます。

  • より小さい (LT)

  • 以下 (LTE)

  • より大きい (GT)

  • 以上 (GTE)

これらの演算子を使用する場合は、valueを引用符で囲む必要があります。日付比較は、すべての標準日付/時刻形式とyyyyMMddTHHmmssZをサポートしています。日付はUTC形式で保存されます。ただし、クエリに入力された値はローカルの値と見なされます。

大事な

この機能を初めて使用する前に、クエリを実行するコンテンツを再発行して、内部データ構造を再構築します。それ以外の場合、データは文字列として辞書式に比較されます。たとえば、データが再構築されない場合、値3123より大きいと見なされます。

クエリ - 日付範囲

query {
  search(
    where: {
      AND: [
        { name: "birthdate" operator: LT value: "2024-01-01"}
        { name: "birthdate" operator: GT value: "1950-01-01"}
      ]
    }
  ) {
    results {
      name
      BirthDate: field(name: "birthdate") {
        value
      }
    }
  }
}

結果 - 日付範囲

query {
  search(
    where: {
      AND: [
        { name: "count" operator: LTE value: "300.0" }
        { name: "count" operator: GTE value: "71" }
      ]
    }
  ) {
    results {
      name
      Count: field(name: "count") {
        value
      }
    }
  }
}

クエリ - 数値範囲

query {
  search(
    where: {
      AND: [
        { name: "count" operator: LTE value: "300.0" }
        { name: "count" operator: GTE value: "71" }
      ]
    }
  ) {
    results {
      name
      Count: field(name: "count") {
        value
      }
    }
  }
}

結果 - 番号範囲

{
  "data": {
    "search": {
      "results": [
        {
          "name": "3",
          "Count": {
            "value": "71"
          }
        },
        {
          "name": "2",
          "Count": {
            "value": "300"
          }
        },
        {
          "name": "1",
          "Count": {
            "value": "100"
          }
        }
      ]
    }
  }
}

ビルド サイト ナビゲーション

このサンプル クエリは 、サイト ルートの検索 と、項目の子を走査する機能を組み合わせたものです。 hasLayout引数を使用してレイアウト(ナビゲート可能ページ)の項目のみを検索し、includeTemplateIds引数を使用して(ベース)データテンプレートでフィルタリングできます。

クエリ

fragment navigationFields on Item {
  ... on AppRoute {
    pageTitle {
      value
    }
  }
  url {
    path
  }
}

query {
  layout(site: "experienceedge", routePath: "/", language: "en") {
    item {
      ...navigationFields
      children(hasLayout: true, includeTemplateIDs: "e34d8c4f7e6c560cbe24e4d1fcdb16d8") {
        results {
          ...navigationFields
          children(hasLayout: true, includeTemplateIDs: "e34d8c4f7e6c560cbe24e4d1fcdb16d8") {
            results {
            	...navigationFields
            }
          }
        }
      }
    }
  }
}

結果

{
  "data": {
    "layout": {
      "item": {
        "pageTitle": {
          "value": "Welcome to Sitecore JSS"
        },
        "url": {
          "path": "/"
        },
        "children": {
          "results": [
            {
              "pageTitle": {
                "value": "GraphQL | Sitecore JSS"
              },
              "url": {
                "path": "/graphql"
              },
              "children": {
                "results": [
                  {
                    "pageTitle": {
                      "value": "Sample 1 Page Title"
                    },
                    "url": {
                      "path": "/graphql/sample-1"
                    }
                  },
                  {
                    "pageTitle": {
                      "value": "Sample 2 Page Title"
                    },
                    "url": {
                      "path": "/graphql/sample-2"
                    }
                  }
                ]
              }
            },
            {
              "pageTitle": {
                "value": "Styleguide | Sitecore JSS"
              },
              "url": {
                "path": "/styleguide"
              },
              "children": {
                "results": [
                  {
                    "pageTitle": {
                      "value": "Custom Route Type | Sitecore JSS"
                    },
                    "url": {
                      "path": "/styleguide/custom-route-type"
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
  }
}

ページ階層リンクを作成する

項目グラフ タイプのancestorsフィールドを使用して、階層リンク ナビゲーションを作成できます。 hasLayout引数を使用して、レイアウト (ナビゲート可能なページ) の項目のみを検索し、includeTemplateIds (基本) データ テンプレートでフィルター処理します。

クエリ

fragment breadcrumbFields on Item {
  ... on AppRoute {
    pageTitle {
      value
    }
  }
  url {
    path
  }
}

query {
  # Assume the item id is available on the page
  item(path: "e2c5c62f42a95b17bc0e71bc9193db9a", language: "en") {
    ...breadcrumbFields
    ancestors(
      hasLayout: true
      includeTemplateIDs: "e34d8c4f7e6c560cbe24e4d1fcdb16d8"
    ) {
      ...breadcrumbFields
    }
  }
}

結果

{
  "data": {
    "item": {
      "pageTitle": {
        "value": "Custom Route Type | Sitecore JSS"
      },
      "url": {
        "path": "/styleguide/custom-route-type"
      },
      "ancestors": [
        {
          "pageTitle": {
            "value": "Styleguide | Sitecore JSS"
          },
          "url": {
            "path": "/styleguide"
          }
        },
        {
          "pageTitle": {
            "value": "Welcome to Sitecore JSS"
          },
          "url": {
            "path": "/"
          }
        }
      ]
    }
  }
}

アイテム フィールドをSitecoreヘッドレスSDKで使用する

さまざまなSitecoreヘッドレスSDKにはすべて、フィールド値をレンダリングするためのヘルパーが含まれています。これらのヘルパーは、インライン編集のコンテキストで複雑なフィールド (画像やリンクなど) と編集可能な値をレンダリングするのに役立ちます。Experience Edgeスキーマの項目フィールドには、これらのフィールドヘルパーと互換性のある形式でフィールドを出力するjsonValueが含まれます。

例えば、次のリンクフィールドは、Linkフィールドヘルパーを使用してReactまたはNext.jsでレンダリングできます。

<Link field={data.linkFieldExample?.externalLink?.jsonValue} />

クエリ

query {
  richTextFieldExample: item(path: "d979794f76fd51829f3ece48d16dc36c", language: "en") {
    displayName
    ... on StyleguideFieldUsageRichText {
      sample {
        jsonValue
      }
    }
  }
  imageFieldExample: item(path: "c05be0b464885343b5670145b6815d03", language: "en") {
    displayName
    ... on StyleguideFieldUsageImage {dic
      sample1 {
        jsonValue
      }
    }
  }
  linkFieldExample: item(path: "d299e65e1f6c5ea3b71381c8e2f85baf", language: "en") {
    displayName
    ... on StyleguideFieldUsageLink {
      externalLink {
        jsonValue
      }
    }
  }
}

結果

{
  "data": {
    "richTextFieldExample": {
      "displayName": "Styleguide-FieldUsage-RichText-3",
      "sample": {
        "jsonValue": {
          "value": "<p>This is a sample rich text field. <mark>HTML is always supported.</mark> In Sitecore, editors will see a WYSIWYG editor for these fields.</p>"
        }
      }
    },
    "imageFieldExample": {
      "displayName": "Styleguide-FieldUsage-Image-4",
      "sample1": {
        "jsonValue": {
          "value": {
            "src": "https://cm.experience_edge.localhost/-/media/experienceedge/data/media/img/sc_logo.png?iar=0&hash=F4F969FF95009AE0A80FA094C497ED25",
            "alt": "Sitecore Logo"
          }
        }
      }
    },
    "linkFieldExample": {
      "displayName": "Styleguide-FieldUsage-Link-9",
      "externalLink": {
        "jsonValue": {
          "value": {
            "href": "https://www.sitecore.com",
            "text": "Link to Sitecore",
            "url": "https://www.sitecore.com",
            "linktype": "external"
          }
        }
      }
    }
  }
}

すべてのコンテンツ サイトに関する情報を取得する

siteInfoCollectionフィールドを使用して、siteクエリ内のすべてのコンテンツ サイトに関する情報を取得できます。たとえば、使用可能なすべてのサイトの名前とルート パスを取得するには、次のクエリを使用します。

クエリ

query {
 site {
  siteInfoCollection{
   name
   rootPath
  }
 }
}

結果

{
 "data": {
  "site": {
   "siteInfoCollection": [
    {
     "name": "example",
     "rootPath": "/sitecore/content/sxa/example"
    },
    {
     "name": "website",
     "rootPath": "/sitecore/content"
    }
   ]
  }
 }
}

特定のコンテンツ サイトに関する情報を取得する

siteクエリのsiteInfoフィールドを使用して、特定のコンテンツ サイトに関する情報を取得できます。たとえば、次のクエリはサイト名とルート パスを返します。

クエリ

query {
 site {
  siteInfo(site: example”) {
   name
   rootPath
  }
 }
}

結果

{
 "data": {
  "site": {
   "siteInfo": {
    "name": "example",
    "rootPath": "/sitecore/content/sxa/example"
   }
  }
 }
}

リダイレクトルールを一覧表示する

特定のサイトに関する情報を照会するときに、リダイレクト ルールのリストをリクエストできます。次のクエリ例では、応答にはリダイレクトの種類、ターゲット、パターン、およびリダイレクトがクエリ文字列パラメーターを保持するかどうかが含まれます。

クエリ

query {
 site {
  siteInfo(site: example”) {
   name
   rootPath
   redirects {
    redirectType
    isQueryStringPreserved
    target
    pattern
   }
  }
 }
}

結果

{
 "data": {
  "site": {
   "siteInfo": {
    "name": "example",
    "rootPath": "/sitecore/content/sxa/example",
    "redirects": [
     {
       "redirectType": "REDIRECT_302",
      "isQueryStringPreserved": true,
      "target": "/page C",
      "pattern": "/page b/"
     }
    ]
   }
  }
 }
}

エラー処理ページを取得する

特定のサイトに関する情報を照会する場合は、エラー処理プロセスに関連するすべてのページの情報を要求できます。この結果は、必要なすべてのエラー・コードが処理されるかどうか、およびどのページによって処理されるかを判断するのに役立ちます。

クエリ

query {
 site {
  siteInfo(site: example”) {
  	errorHandling(language: en”) {
    notFoundPage {
     id
     path
     field (name: "Title") {
      name
      value
     }
    },
    notFoundPagePath,
    serverErrorPage {
     id
     name
     path
     field (name: "Title") {
      name
      value
     }
    },
   serverErrorPagePath
   }
  }
 }
}

結果

{
 "data": {
  "site": {
   "siteInfo": {
    "errorHandling": {
     "notFoundPage": {
      "id": "7AC72838792444A389BDD10D63A30FA6",
      "path": "/sitecore/content/sxa/example/Home/custom-404-error-page",
      "field": {
       "name": "Title",
       "value": "custom-404-error-page"
      }
     },
     "notFoundPagePath": "/custom-404-error-page",
     "serverErrorPage": {
      "id": "846C9D39299740D0A25235ECA3F5B202",
      "name": "custom-500-error-page",
      "path": "/sitecore/content/sxa/example/Home/custom-500-error-page",
      "field": {
       "name": "Title",
       "value": "custom-500-error-page"
      }
     },
     "serverErrorPagePath": "/custom-500-error-page"
    }
   }
  }
 }
}

ロボット情報を取得する

siteクエリを使用して、どの検索エンジン クローラがサイトにアクセスできるかに関する情報をリクエストできます。

クエリ

query {
 site {
  siteInfo(site: example”) {
   robots
  }
 }
}

結果

{
 "data": {
  "site": {
   "siteInfo": {
    "robots": "google, bing\r\nSitemap: https://xmcloudcm.localhost/sitemap.xml\r\n"
   }
  }
 }
}

SXAサイトのサイトマップを取得する

SXAサイト サイトマップ用に生成されたメディア アイテムへのパスをクエリできます。

クエリ

query {
 site {
  siteInfo(site: example”) {
   sitemap
  }
 }
}

結果

{
 "data": {
  "site": {
   "siteInfo": {
    "sitemap": " /-/media/Project/sxa/example/Sitemaps/sitemap.xml"
   }
  }
 }
}

ディクショナリエントリを取得する

サイトの個々の辞書エントリを取得するには、siteクエリを使用します。カーソル引数を組み合わせて、結果にページングを適用できます。これらが指定されていない場合、デフォルトはfirstページ・サイズ500です。

クエリ

query  {
  site {
    siteInfo(site: "example") {
      name
      dictionary(language:"en",first:2, after:"eyJzZWFyY2hBZnRlciI6WyJrZXkyIiwiZGVtb3NpdGUtMzVjZDg5NjJjNzE4NDI4Nzk2YzBmYTU2YmY2ZjRmMjIta2V5Mi11ay11YSJdLCJjb3VudCI6Mn0=")
      {
        total
        pageInfo{
          hasNext
          endCursor
        }
        results
        {
          key
          value
        }
      }
    }
  }
}

結果

  "data": {
    "site": {
      "siteInfo": {
        "name": "example",
        "dictionary": {
          "total": 2,
          "pageInfo": {
            "hasNext": false,
            "endCursor": "eyJzZWFyY2hBZnRlciI6WyJ0ZXN0MiIsIm5ldyBzaXRlLWU1MmU1ZjBiZmMxMzQ0Mzc5YWQ4YzcyMjY2NzIzZmI0LXRlc3QyLWVuIl0sImNvdW50IjoyfQ=="
          },
          "results": [
            {
              "key": "key1",
              "value": "value1"
            },
            {
              "key": "key2",
              "value": "value2"
            }
          ]
        }
      }
    }
  }
}
この記事を改善するための提案がある場合は、 お知らせください!