學習如何搭配AEM使用GraphQL — 範例內容與查詢

了解如何透過探索範例內容和查詢,將GraphQL與AEM搭配使用,以無故提供內容。

若要開始使用GraphQL查詢,以及這些查詢如何搭配AEM內容片段使用,請參閱一些實用範例。

如需此項目的協助,請參閱:

GraphQL — 使用範例內容片段結構的範例查詢

請參閱這些範例查詢以取得建立查詢的圖解以及範例結果。

注意

根據您的實例,您可以直接訪問AEM GraphQL API🔗中包含的Graph i QL介面,以提交和測試查詢。

例如:http://localhost:4502/content/graphiql.html

注意

範例查詢以要與GraphQL搭配使用的範例內容片段結構為基礎

範例查詢 — 所有可用的結構和資料類型

這會傳回所有可用結構的所有types

範例查詢

{
  __schema {
    types {
      name
      description
    }
  }
}

範例結果

{
  "data": {
    "__schema": {
      "types": [
        {
          "name": "AdventureModel",
          "description": null
        },
        {
          "name": "AdventureModelArrayFilter",
          "description": null
        },
        {
          "name": "AdventureModelFilter",
          "description": null
        },
        {
          "name": "AdventureModelResult",
          "description": null
        },
        {
          "name": "AdventureModelResults",
          "description": null
        },
        {
          "name": "AllFragmentModels",
          "description": null
        },
        {
          "name": "ArchiveRef",
          "description": null
        },
        {
          "name": "ArrayMode",
          "description": null
        },
        {
          "name": "ArticleModel",
          "description": null
        },

...more results...

        {
          "name": "__EnumValue",
          "description": null
        },
        {
          "name": "__Field",
          "description": null
        },
        {
          "name": "__InputValue",
          "description": null
        },
        {
          "name": "__Schema",
          "description": "A GraphQL Introspection defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, the entry points for query, mutation, and subscription operations."
        },
        {
          "name": "__Type",
          "description": null
        },
        {
          "name": "__TypeKind",
          "description": "An enum describing what kind of type a given __Type is"
        }
      ]
    }
  }
}

範例查詢 — 所有城市的所有資訊

若要擷取關於所有城市的所有資訊,您可以使用非常基本的查詢:
範例查詢

{
  cityList {
    items
  }
}

執行時,系統會自動展開查詢以包含所有欄位:

{
  cityList {
    items {
      _path
      name
      country
      population
    }
  }
}

範例結果

{
  "data": {
    "cityList": {
      "items": [
        {
          "_path": "/content/dam/sample-content-fragments/cities/basel",
          "name": "Basel",
          "country": "Switzerland",
          "population": 172258
        },
        {
          "_path": "/content/dam/sample-content-fragments/cities/berlin",
          "name": "Berlin",
          "country": "Germany",
          "population": 3669491
        },
        {
          "_path": "/content/dam/sample-content-fragments/cities/bucharest",
          "name": "Bucharest",
          "country": "Romania",
          "population": 1821000
        },
        {
          "_path": "/content/dam/sample-content-fragments/cities/san-francisco",
          "name": "San Francisco",
          "country": "USA",
          "population": 883306
        },
        {
          "_path": "/content/dam/sample-content-fragments/cities/san-jose",
          "name": "San Jose",
          "country": "USA",
          "population": 1026350
        },
        {
          "_path": "/content/dam/sample-content-fragments/cities/stuttgart",
          "name": "Stuttgart",
          "country": "Germany",
          "population": 634830
        },
        {
          "_path": "/content/dam/sample-content-fragments/cities/zurich",
          "name": "Zurich",
          "country": "Switzerland",
          "population": 415367
        }
      ]
    }
  }
}

範例查詢 — 所有城市的名稱

這是直接查詢,可傳回city架構中所有項目的name

範例查詢

query {
  cityList {
    items {
      name
    }
  }
}

範例結果

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "Basel"
        },
        {
          "name": "Berlin"
        },
        {
          "name": "Bucharest"
        },
        {
          "name": "San Francisco"
        },
        {
          "name": "San Jose"
        },
        {
          "name": "Stuttgart"
        },
        {
          "name": "Zurich"
        }
      ]
    }
  }
}

範例查詢 — 單一特定城市片段

這是一個查詢,用於返回儲存庫中特定位置的單個片段條目的詳細資訊。

範例查詢

{
  cityByPath (_path: "/content/dam/sample-content-fragments/cities/berlin") {
    item {
      _path
      name
      country
      population
     categories
    }
  }
}

範例結果

{
  "data": {
    "cityByPath": {
      "item": {
        "_path": "/content/dam/sample-content-fragments/cities/berlin",
        "name": "Berlin",
        "country": "Germany",
        "population": 3669491,
        "categories": [
          "city:capital",
          "city:emea"
        ]
      }
    }
  }
}

範例查詢 — 具有已命名變數的所有城市

如果您為city柏林建立名為"Berlin Center"(berlin_centre)的新變數,則可使用查詢傳回變數的詳細資料。

範例查詢

{
  cityList (variation: "berlin_center") {
    items {
      _path
      name
      country
      population
      categories
    }
  }
}

範例結果

{
  "data": {
    "cityList": {
      "items": [
        {
          "_path": "/content/dam/sample-content-fragments/cities/berlin",
          "name": "Berlin",
          "country": "Germany",
          "population": 3669491,
          "categories": [
            "city:capital",
            "city:emea"
          ]
        }
      ]
    }
  }
}

示例查詢 — 公司CEO和員工的完整詳細資訊

使用巢狀片段的結構,此查詢會傳回公司CEO及其所有員工的完整詳細資訊。

範例查詢

query {
  companyList {
    items {
      name
      ceo {
        _path
        name
        firstName
        awards {
        id
          title
        }
      }
      employees {
       name
        firstName
       awards {
         id
          title
        }
      }
    }
  }
}

範例結果

{
  "data": {
    "companyList": {
      "items": [
        {
          "name": "Apple Inc.",
          "ceo": {
            "_path": "/content/dam/sample-content-fragments/persons/steve-jobs",
            "name": "Jobs",
            "firstName": "Steve",
            "awards": []
          },
          "employees": [
            {
              "name": "Marsh",
              "firstName": "Duke",
              "awards": []
            },
            {
              "name": "Caulfield",
              "firstName": "Max",
              "awards": [
                {
                  "id": "GB",
                  "title": "Gameblitz"
                }
              ]
            }
          ]
        },
        {
          "name": "Little Pony, Inc.",
          "ceo": {
            "_path": "/content/dam/sample-content-fragments/persons/adam-smith",
            "name": "Smith",
            "firstName": "Adam",
            "awards": []
          },
          "employees": [
            {
              "name": "Croft",
              "firstName": "Lara",
              "awards": [
                {
                  "id": "GS",
                  "title": "Gamestar"
                }
              ]
            },
            {
              "name": "Slade",
              "firstName": "Cutter",
              "awards": [
                {
                  "id": "GB",
                  "title": "Gameblitz"
                },
                {
                  "id": "GS",
                  "title": "Gamestar"
                }
              ]
            }
          ]
        },
        {
          "name": "NextStep Inc.",
          "ceo": {
            "_path": "/content/dam/sample-content-fragments/persons/steve-jobs",
            "name": "Jobs",
            "firstName": "Steve",
            "awards": []
          },
          "employees": [
            {
              "name": "Smith",
              "firstName": "Joe",
              "awards": []
            },
            {
              "name": "Lincoln",
              "firstName": "Abraham",
              "awards": []
            }
          ]
        }
      ]
    }
  }
}

Sample Query — 名為「Jobs」或「Smith」的所有人員

這將篩選所有名稱為JobsSmithpersons

範例查詢

query {
  personList(filter: {
    name: {
      _logOp: OR
      _expressions: [
        {
          value: "Jobs"
        },
        {
          value: "Smith"
        }
      ]
    }
  }) {
    items {
      name
      firstName
    }
  }
}

範例結果

{
  "data": {
    "personList": {
      "items": [
        {
          "name": "Smith",
          "firstName": "Adam"
        },
        {
          "name": "Smith",
          "firstName": "Joe"
        },
        {
          "name": "Jobs",
          "firstName": "Steve"
        }
      ]
    }
  }
}

示例查詢 — 沒有「Jobs」名稱的所有人員

這將篩選所有名稱為JobsSmithpersons

範例查詢

query {
  personList(filter: {
    name: {
      _expressions: [
        {
          value: "Jobs"
          _operator: EQUALS_NOT
        }
      ]
    }
  }) {
    items {
      name
      firstName
    }
  }
}

範例結果

{
  "data": {
    "personList": {
      "items": [
        {
          "name": "Lincoln",
          "firstName": "Abraham"
        },
        {
          "name": "Smith",
          "firstName": "Adam"
        },
        {
          "name": "Slade",
          "firstName": "Cutter"
        },
        {
          "name": "Marsh",
          "firstName": "Duke"
        },
        {
          "name": "Smith",
          "firstName": "Joe"
        },
        {
          "name": "Croft",
          "firstName": "Lara"
        },
        {
          "name": "Caulfield",
          "firstName": "Max"
        }
      ]
    }
  }
}

範例查詢 — 其_path開頭為特定首碼的所有歷險

_path中的adventures以特定前置詞(/content/dam/wknd/en/adventures/cycling)開頭。

範例查詢

query {
  adventureList(
    filter: {
      _path: {
        _expressions: [
        {
          value: "/content/dam/wknd/en/adventures/cycling"
         _operator: STARTS_WITH
        }]
       }
    })
    {
    items {
      _path
    }
  }
}

範例結果

{
  "data": {
    "adventureList": {
      "items": [
        {
          "_path": "/content/dam/wknd/en/adventures/cycling-southern-utah/cycling-southern-utah"
        },
        {
          "_path": "/content/dam/wknd/en/adventures/cycling-tuscany/cycling-tuscany"
        }
      ]
    }
  }
}

範例查詢 — 位於德國或瑞士,人口介於400000和999999之間的所有城市

此處會篩選欄位組合。 AND(隱式)用於選擇population範圍,而OR(顯式)用於選擇所需城市。

範例查詢

query {
  cityList(filter: {
    population: {
      _expressions: [
        {
          value: 400000
          _operator: GREATER_EQUAL
        }, {
          value: 1000000
          _operator: LOWER
        }
      ]
    },
    country: {
      _logOp: OR
      _expressions: [
        {
          value: "Germany"
        }, {
          value: "Switzerland"
        }
      ]
    }
  }) {
    items {
      name
      population
      country
    }
  }
}

範例結果

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "Stuttgart",
          "population": 634830,
          "country": "Germany"
        },
        {
          "name": "Zurich",
          "population": 415367,
          "country": "Switzerland"
        }
      ]
    }
  }
}

示例查詢 — 名稱中包含SAN的所有城市(不考慮大小寫)

此查詢會詢問名稱中包含SAN的所有城市,而不考慮大小寫。

範例查詢

query {
  cityList(filter: {
    name: {
      _expressions: [
        {
          value: "SAN"
          _operator: CONTAINS
          _ignoreCase: true
        }
      ]
    }
  }) {
    items {
      name
      population
      country
    }
  }
}

範例結果

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "San Francisco",
          "population": 883306,
          "country": "USA"
        },
        {
          "name": "San Jose",
          "population": 1026350,
          "country": "USA"
        }
      ]
    }
  }
}

範例查詢 — 對項目必須至少發生一次的陣列進行篩選

此查詢會篩選陣列上必須至少發生一次的項目(city:na)。

範例查詢

query {
  cityList(filter: {
    categories: {
      _expressions: [
        {
          value: "city:na"
          _apply: AT_LEAST_ONCE
        }
      ]
    }
  }) {
    items {
      name
      population
      country
      categories
    }
  }
}

範例結果

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "San Francisco",
          "population": 883306,
          "country": "USA",
          "categories": [
            "city:beach",
            "city:na"
          ]
        },
        {
          "name": "San Jose",
          "population": 1026350,
          "country": "USA",
          "categories": [
            "city:na"
          ]
        }
      ]
    }
  }
}

範例查詢 — 篩選精確的陣列值

此查詢會篩選確切的陣列值。

範例查詢

query {
  cityList(filter: {
    categories: {
      _expressions: [
        {
          values: [
            "city:beach",
            "city:na"
          ]
        }
      ]
    }
  }) {
    items {
      name
      population
      country
      categories
    }
  }
}

範例結果

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "San Francisco",
          "population": 883306,
          "country": "USA",
          "categories": [
            "city:beach",
            "city:na"
          ]
        }
      ]
    }
  }
}

巢狀內容片段的查詢範例 — 所有至少有一名員工且名稱為「Smith」的公司

此查詢說明了對name "Smith"的任何person進行篩選,從兩個巢狀片段 — companyemployee返回資訊。

範例查詢

query {
  companyList(filter: {
    employees: {
      _match: {
        name: {
          _expressions: [
            {
              value: "Smith"
            }
          ]
        }
      }
    }
  }) {
    items {
      name
      ceo {
        name
        firstName
      }
      employees {
        name
        firstName
      }
    }
  }
}

範例結果

{
  "data": {
    "companyList": {
      "items": [
        {
          "name": "NextStep Inc.",
          "ceo": {
            "name": "Jobs",
            "firstName": "Steve"
          },
          "employees": [
            {
              "name": "Smith",
              "firstName": "Joe"
            },
            {
              "name": "Lincoln",
              "firstName": "Abraham"
            }
          ]
        }
      ]
    }
  }
}

巢狀內容片段的範例查詢 — 所有員工皆獲得「遊戲之星」獎的公司

此查詢說明如何跨三個巢狀片段(companyemployeeaward)進行篩選。

範例查詢

query {
  companyList(filter: {
    employees: {
      _apply: ALL
      _match: {
        awards: {
          _match: {
            id: {
              _expressions: [
                {
                  value: "GS"
                  _operator:EQUALS
                }
              ]
            }
          }
        }
      }
    }
  }) {
    items {
      name
      ceo {
        name
        firstName
      }
      employees {
        name
        firstName
        awards {
          id
          title
        }
      }
    }
  }
}

範例結果

{
  "data": {
    "companyList": {
      "items": [
        {
          "name": "Little Pony, Inc.",
          "ceo": {
            "name": "Smith",
            "firstName": "Adam"
          },
          "employees": [
            {
              "name": "Croft",
              "firstName": "Lara",
              "awards": [
                {
                  "id": "GS",
                  "title": "Gamestar"
                }
              ]
            },
            {
              "name": "Slade",
              "firstName": "Cutter",
              "awards": [
                {
                  "id": "GB",
                  "title": "Gameblitz"
                },
                {
                  "id": "GS",
                  "title": "Gamestar"
                }
              ]
            }
          ]
        }
      ]
    }
  }
}

中繼資料的範例查詢 — 列出題為GB的獎項中繼資料

此查詢說明如何跨三個巢狀片段(companyemployeeaward)進行篩選。

範例查詢

query {
  awardList(filter: {
      id: {
        _expressions: [
          {
            value:"GB"
          }
        ]
    }
  }) {
    items {
      _metadata {
        stringMetadata {
          name,
          value
        }
      }
      id
      title
    }
  }
}

範例結果

{
  "data": {
    "awardList": {
      "items": [
        {
          "_metadata": {
            "stringMetadata": [
              {
                "name": "title",
                "value": "Gameblitz Award"
              },
              {
                "name": "description",
                "value": ""
              }
            ]
          },
          "id": "GB",
          "title": "Gameblitz"
        }
      ]
    }
  }
}

使用WKND專案的查詢範例

這些範例查詢是以WKND專案為基礎。 這包括:

  • 內容片段模型可用於:
    http://<hostname>:<port>/libs/dam/cfm/models/console/content/models.html/conf/wknd

  • 下列位置提供內容片段(和其他內容):
    http://<hostname>:<port>/assets.html/content/dam/wknd/en

注意

由於結果可能很廣泛,因此這些結果不會在此處重現。

具有指定屬性之特定模型的所有內容片段的範例查詢

此示例查詢將詢問:

  • article類型的所有內容片段
  • author屬性。path

範例查詢

{
  articleList {
    items {
      _path
      author
    }
  }
}

中繼資料的查詢範例

此查詢將詢問:

  • adventure類型的所有內容片段
  • 中繼資料

範例查詢

{
  adventureList {
    items {
      _path,
      _metadata {
        stringMetadata {
          name,
          value
        }
        stringArrayMetadata {
          name,
          value
        }
        intMetadata {
          name,
          value
        }
        intArrayMetadata {
          name,
          value
        }
        floatMetadata {
          name,
          value
        }
        floatArrayMetadata {
          name,
          value
        }
        booleanMetadata {
          name,
          value
        }
        booleanArrayMetadata {
          name,
          value
        }
        calendarMetadata {
          name,
          value
        }
        calendarArrayMetadata {
          name,
          value
        }
      }
    }
  }
}

指定模型的單一內容片段的查詢範例

此示例查詢將詢問:

  • 針對特定路徑上article類型的單一內容片段
    • 其中,所有格式的內容:
      • HTML
      • Markdown
      • 純文字
      • JSON

範例查詢

{
  articleByPath (_path: "/content/dam/wknd/en/magazine/alaska-adventure/alaskan-adventures") {
    item {
        _path
        author
        main {
          html
          markdown
          plaintext
          json
        }
    }
  }
}

從模型中查詢內容片段模型的範例

此示例查詢將詢問:

  • (適用於單一內容片段)
    • 基礎內容片段模型的詳細資訊

範例查詢

{
  adventureByPath(_path: "/content/dam/wknd/en/adventures/riverside-camping-australia/riverside-camping-australia") {
    item {
      _path
      adventureTitle
      _model {
        _path
        title
      }
    }
  }
}

巢狀內容片段的查詢範例 — 單一模型類型

此查詢將詢問:

  • 針對特定路徑上article類型的單一內容片段
    • 其中,參照(巢狀)片段的路徑和作者
注意

欄位referencearticle具有資料類型fragment-reference

範例查詢

{
  articleByPath (_path: "/content/dam/wknd/en/magazine/skitouring/skitouring") {
    item {
        _path
        author
        referencearticle {
          _path
          author
      }
    }
  }
}

巢狀內容片段的範例查詢 — 多模型類型

此查詢將詢問:

  • 適用於bookmark類型的多個內容片段
    • 具有特定模型類型articleadventure的其他片段參考
注意

欄位fragments具有資料類型fragment-reference,且已選取模型ArticleAdventure

{
  bookmarkList {
    items {
        fragments {
          ... on ArticleModel {
            _path
            author
          }
          ... on AdventureModel {
            _path
            adventureTitle
          }
        }
     }
  }
}

具有內容參考之特定模型的內容片段查詢範例

此查詢有兩種類型:

  1. 傳回所有內容參考。
  2. 返回類型attachments的特定內容引用。

這些查詢會詢問:

  • 適用於bookmark類型的多個內容片段
    • 搭配其他片段的內容參考

具有預先擷取的參考之多個內容片段的查詢範例

下列查詢會使用_references傳回所有內容參考:

{
  bookmarkList {
     _references {
         ... on ImageRef {
          _path
          type
          height
        }
        ... on MultimediaRef {
          _path
          type
          size
        }
        ... on DocumentRef {
          _path
          type
          author
        }
        ... on ArchiveRef {
          _path
          type
          format
        }
    }
    items {
        _path
    }
  }
}

含附件的多個內容片段的查詢範例

以下查詢返回所有attachments — 類型content-reference的特定欄位(子組):

注意

欄位attachments具有資料類型content-reference,且已選取各種表單。

{
  bookmarkList {
    items {
      attachments {
        ... on PageRef {
          _path
          type
        }
        ... on ImageRef {
          _path
          width
        }
        ... on MultimediaRef {
          _path
          size
        }
        ... on DocumentRef {
          _path
          author
        }
        ... on ArchiveRef {
          _path
          format
        }
      }
    }
  }
}

具有RTE內嵌參考的單一內容片段的查詢範例

此查詢將詢問:

  • 針對特定路徑上bookmark類型的單一內容片段
    • 其中,RTE內嵌參照
注意

_references中對RTE內嵌引用進行水合。

範例查詢

{
  bookmarkByPath(_path: "/content/dam/wknd/en/bookmarks/skitouring") {
    item {
      _path
      description {
        json
      }
    }
    _references {
      ... on ArticleModel {
        _path
      }
      ... on AdventureModel {
        _path
      }
      ... on ImageRef {
        _path
      }
      ... on MultimediaRef {
        _path
      }
      ... on DocumentRef {
        _path
      }
      ... on ArchiveRef {
        _path
      }
    }
  }
}

指定模型的單一內容片段變異的範例查詢

此查詢將詢問:

  • 針對特定路徑上article類型的單一內容片段
    • 其中,與變異相關的資料:variation1

範例查詢

{
  articleByPath (_path: "/content/dam/wknd/en/magazine/alaska-adventure/alaskan-adventures", variation: "variation1") {
    item {
      _path
      author
      main {
        html
        markdown
        plaintext
        json
      }
    }
  }
}

指定模型的多個內容片段之命名變異的查詢範例

此查詢將詢問:

  • 針對具有特定變異之article類型的內容片段:variation1

範例查詢

{
  articleList (variation: "variation1") {
    items {
      _path
      author
      main {
        html
        markdown
        plaintext
        json
      }
    }
  }
}

指定地區的多個內容片段的查詢範例

此查詢將詢問:

  • fr地區設定內article類型的內容片段

範例查詢

{ 
  articleList (_locale: "fr") {
    items {
      _path
      author
      main {
        html
        markdown
        plaintext
        json
      }
    }
  }
}

範例內容片段結構(與GraphQL搭配使用)

範例查詢以下列結構為基礎,其使用:

內容片段模型範例(結構)

對於範例查詢,我們將使用下列內容模型及其相互關係(參考 — >):

公司

定義公司的基本欄位包括:

欄位名稱 資料類型 引用
公司名稱 單行文字
首席執行官 片段參考(單一) 人員
員工 片段參考(多欄位) 人員

人員

定義人員的欄位,也可以是員工:

欄位名稱 資料類型 引用
名稱 單行文字
名字 單行文字
獎勵 片段參考(多欄位) 獎勵

獎勵

定義獎勵的欄位包括:

欄位名稱 資料類型 引用
快捷方式/ID 單行文字
標題 單行文字

城市

定義城市的欄位有:

欄位名稱 資料類型 引用
名稱 單行文字
國家/地區 單行文字
人口 數量
類別 標記

範例內容片段

下列片段用於適當的模型。

公司

公司名稱 首席執行官 員工
Apple 史蒂夫·喬布斯 杜克·馬什
馬克斯·考爾菲爾德
小馬公司 亞當·斯密 拉拉·克羅夫特
刀刀刀刀
NextStep Inc. 史蒂夫·喬布斯 喬·史密斯
阿部·林肯

人員

名稱 名字 獎勵
林肯 阿部
史密斯 Adam
斯萊德 刀具 Gameblitz
Gamestar
馬什 杜克
史密斯
克羅夫特 拉拉 遊戲之星
考爾菲爾德 最大值 加梅布利茨
工作 史蒂夫

獎勵

快捷方式/ID 標題
GB 加梅布利茨
GS 遊戲之星
OSC 奧斯卡

城市

名稱 國家/地區 人口 類別
巴塞爾 瑞士 172258 城市:emea
柏林 德國 3669491 city:capital
city:emea
布加勒斯特 羅馬尼亞 1821000 city:capital
city:emea
舊金山 美國 883306 city:beach
city:na
聖荷西 美國 102635 城市:納
斯圖加特 德國 634830 城市:emea
蘇黎世 瑞士 415367 city:capital
city:emea

本頁內容