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

注意

本頁應與以下內容一起閱讀:

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

若要協助此項作業,請參閱:

GraphQL for AEM —— 擴展集摘要

使用GraphQL for AEM對查詢的基本操作符合標準GraphQL規範。 對於具有AEM的GraphQL查詢,有幾個擴充功能:

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

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

注意

根據您的例項,您可以直接存取AEM GraphQL API](/docs/experience-manager-cloud-service/assets/admin/graphql-api-content-fragments.html?lang=zh-Hant#graphiql-interface)隨附的[Graph i QL介面,以提交和測試查詢。

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

注意

示例查詢基於用於GraphQL](#content-fragment-structure-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
        }
      ]
    }
  }
}

Sample Query —所有城市的名稱

這是一個直接查詢,用於返回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_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": []
            }
          ]
        }
      ]
    }
  }
}

示例查詢——名稱為"Jobs"或"Smith"的所有人員

這會針對名稱為JobsSmith的任何項目篩選所有persons

範例查詢

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"的人員

這會針對名稱為JobsSmith的任何項目篩選所有persons

範例查詢

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"
        }
      ]
    }
  }
}

範例查詢——位於德國或瑞士的所有城市,人口在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"
        }
      ]
    }
  }
}

Sample Query —— 對包含項目的陣列進行篩選,該項目必須至少發生一次

此查詢會篩選具有項目(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"
          ]
        }
      ]
    }
  }
}

Sample Query - Filter on a exact array value

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

範例查詢

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"
            }
          ]
        }
      ]
    }
  }
}

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

此查詢說明了對三個嵌套片段的篩選- 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類型的所有內容片段
  • path屬性。author

範例查詢

{
  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內嵌引用
注意

RTE內嵌引用在_references中水合。

範例查詢

{
  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 史蒂夫·喬布斯 杜克·馬什
麥克斯·考爾菲爾德
小馬公司 亞當·斯密 Lara Croft
Cutter Slade
NextStep Inc. 史蒂夫·喬布斯 喬·史密斯
阿貝·林肯

人員

名稱 名字 獎項
林肯 阿貝
史密斯 Adam
斯萊德 刀具 Gameblitz
Gamestar
馬什 杜克
史密斯
克羅夫特 拉拉 Gamestar
Caulfield 最大值 加梅布利茨
工作 史蒂夫

獎項

捷徑/ID 標題
GB 加梅布利茨
GS Gamestar
OSC 奧斯卡

城市

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

本頁內容

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free