了解如何将GraphQL与AEM结合使用 — 示例内容和查询

了解如何通过探索示例内容和查询,将GraphQL与AEM结合使用来无头地提供内容。

注意

本页应与以下内容一起阅读:

要开始使用GraphQL查询以及它们如何使用AEM内容片段,请查看一些实用示例。

要提供相关帮助,请参阅:

GraphQL — 使用示例内容片段结构的示例查询

有关创建查询的插图,请参阅这些示例查询以及示例结果。

注意

根据您的实例,您可以直接访问AEM GraphQL API🔗随附的Graph i QL接口,以提交和测试查询。

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

注意

示例查询 — 所有可用架构和数据类型

这将返回所有可用架构的所有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_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和员工的完整详细信息

使用嵌套片段的结构,此查询可返回公司首席执行官及其所有员工的完整详细信息。

示例查询

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

示例查询 — 以特定前缀开头的所有冒险_path

所有adventures,其中_path以特定前缀(/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"
            }
          ]
        }
      ]
    }
  }
}

嵌套内容片段的查询示例 — 所有员工均获得“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类型的所有内容片段
  • 具有pathauthor属性。

示例查询

{
  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一起使用)

示例查询基于以下结构,该结构使用:

内容片段模型示例(架构)

对于示例查询,我们将使用以下内容模型及其相互关系(引用 — >):

公司

定义公司的基本字段包括:

字段名称 数据类型 针对开发人员的 Adobe AIR API 参考
公司名称 单行文本
首席执行官 片段引用(单个) 人员
员工 片段引用(多字段) 人员

人员

定义人员(也可以是员工)的字段:

字段名称 数据类型 针对开发人员的 Adobe AIR API 参考
名称 单行文本
名字 单行文本
奖项 片段引用(多字段) 奖项

奖项

定义奖励的字段包括:

字段名称 数据类型 针对开发人员的 Adobe AIR API 参考
快捷方式/ID 单行文本
标题 单行文本

城市

用于定义城市的字段包括:

字段名称 数据类型 针对开发人员的 Adobe AIR API 参考
名称 单行文本
国家/地区 单行文本
人口 数字
类别 标记

示例内容片段

以下片段用于相应的模型。

公司

公司名称 首席执行官 员工
Apple 史蒂夫·乔布斯 杜克·马什
Max Caulfield
小马公司 亚当·斯密 Lara Croft
刀刀刀刀刀
NextStep Inc. 史蒂夫·乔布斯 Joe Smith
Abe Lincoln

人员

名称 名字 奖项
林肯 阿部
史密斯 Adam
斯莱德 刀具 Gameblitz
Gamestar
马什 杜克
史密斯
克罗夫特 拉拉 Gamestar
考尔菲尔德 最大 加梅布利茨
作业 Steve

奖项

快捷方式/ID 标题
GB 加梅布利茨
GS Gamestar
OSC Oscar

城市

名称 国家/地区 人口 类别
Basel 瑞士 172258 城市:emea
柏林 德国 3669491 city:capital
city:emea
布加勒斯特 罗马尼亚 1821000 city:capital
city:emea
San Francisco 美国 883306 city:beach
city:na
圣何塞 美国 102635 城市:纳
斯图加特 德国 634830 城市:emea
苏黎世 瑞士 415367 city:capital
city:emea

在此页面上