Erfahren Sie, wie Sie GraphQL mit AEM verwenden, um „headless“-Inhalte bereitzustellen, indem Sie Beispielinhalte und Abfragen untersuchen.
Diese Seite sollte zusammen mit folgenden Themen gelesen werden:
Für den Einstieg in GraphQL-Abfragen und deren Verwendung mit AEM-Inhaltsfragmenten sind einige praktische Beispiele hilfreich.
Sehen Sie dazu:
und einige GraphQL-Beispielabfragen, die auf der Beispielstruktur für Inhaltsfragmente basieren (Inhaltsfragmentmodelle und verwandte Inhaltsfragmente).
In diesen Beispielabfragen wird das Erstellen von Abfragen zusammen mit Beispielergebnissen veranschaulicht.
Abhängig von Ihrer Instanz können Sie direkt auf die in der AEM-GraphQL-API enthaltene GraphiQL-Schnittstelle zugreifen, um Abfragen zu senden und zu testen.
Beispiel: http://localhost:4502/content/graphiql.html
Die Beispielabfragen basieren auf der Beispielstruktur für Inhaltsfragmente zur Verwendung mit GraphQL.
Diese Beispielabfrage gibt alle types
für alle verfügbaren Schemata zurück.
Beispielabfrage
{
__schema {
types {
name
description
}
}
}
Beispielergebnis
{
"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"
}
]
}
}
}
Um alle Informationen zu allen Städten abzurufen, können Sie die grundlegende Abfrage verwenden:
Beispielabfrage
{
cityList {
items
}
}
Wenn die Abfrage ausgeführt wird, erweitert das System sie automatisch, um alle Felder einzuschließen:
{
cityList {
items {
_path
name
country
population
}
}
}
Beispielergebnisse
{
"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
}
]
}
}
}
Diese Beispielabfrage ist eine unkomplizierte Abfrage, um den name
aller Einträge im city
-Schema zurückzugeben.
Beispielabfrage
query {
cityList {
items {
name
}
}
}
Beispielergebnisse
{
"data": {
"cityList": {
"items": [
{
"name": "Basel"
},
{
"name": "Berlin"
},
{
"name": "Bucharest"
},
{
"name": "San Francisco"
},
{
"name": "San Jose"
},
{
"name": "Stuttgart"
},
{
"name": "Zurich"
}
]
}
}
}
Diese Beispielabfrage ist eine Abfrage, um die Details eines einzelnen Fragmenteintrags an einem bestimmten Speicherort im Repository zurückzugeben.
Beispielabfrage
{
cityByPath (_path: "/content/dam/sample-content-fragments/cities/berlin") {
item {
_path
name
country
population
categories
}
}
}
Beispielergebnisse
{
"data": {
"cityByPath": {
"item": {
"_path": "/content/dam/sample-content-fragments/cities/berlin",
"name": "Berlin",
"country": "Germany",
"population": 3669491,
"categories": [
"city:capital",
"city:emea"
]
}
}
}
}
Wenn Sie eine Variante mit dem Namen „Berlin Centre“ (berlin_centre
) für city
Berlin erstellen, können Sie eine Abfrage verwenden, um Details zur Variante zurückzugeben.
Beispielabfrage
{
cityList (variation: "berlin_center") {
items {
_path
name
country
population
categories
}
}
}
Beispielergebnisse
{
"data": {
"cityList": {
"items": [
{
"_path": "/content/dam/sample-content-fragments/cities/berlin",
"name": "Berlin",
"country": "Germany",
"population": 3669491,
"categories": [
"city:capital",
"city:emea"
]
}
]
}
}
}
Wenn Sie:
Tourism
erstellen: Business
, City Break
, Holiday
City
-Instanzen zuweisenDann können Sie eine Abfrage verwenden, um Details zu name
und tags
aller Einträge mit dem Tag „Städtereisen“ im Schema city
herauszugeben.
Beispielabfrage
query {
cityList(
includeVariations: true,
filter: {_tags: {_expressions: [{value: "tourism:city-break", _operator: CONTAINS}]}}
){
items {
name,
_tags
}
}
}
Beispielergebnisse
{
"data": {
"cityList": {
"items": [
{
"name": "Berlin",
"_tags": [
"tourism:city-break",
"tourism:business"
]
},
{
"name": "Zurich",
"_tags": [
"tourism:city-break",
"tourism:business"
]
}
]
}
}
}
Unter Verwendung der Struktur der verschachtelten Fragmente gibt diese Abfrage die vollständigen Details des CEO eines Unternehmens und aller seiner Mitarbeiter zurück.
Beispielabfrage
query {
companyList {
items {
name
ceo {
_path
name
firstName
awards {
id
title
}
}
employees {
name
firstName
awards {
id
title
}
}
}
}
}
Beispielergebnisse
{
"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": []
}
]
}
]
}
}
}
Diese Beispielabfrage filtert alle persons
nach allen, die den Namen Jobs
oder Smith
haben.
Beispielabfrage
query {
personList(filter: {
name: {
_logOp: OR
_expressions: [
{
value: "Jobs"
},
{
value: "Smith"
}
]
}
}) {
items {
name
firstName
}
}
}
Beispielergebnisse
{
"data": {
"personList": {
"items": [
{
"name": "Smith",
"firstName": "Adam"
},
{
"name": "Smith",
"firstName": "Joe"
},
{
"name": "Jobs",
"firstName": "Steve"
}
]
}
}
}
Diese Beispielabfrage filtert alle persons
nach allen, die den Namen Jobs
oder Smith
haben.
Beispielabfrage
query {
personList(filter: {
name: {
_expressions: [
{
value: "Jobs"
_operator: EQUALS_NOT
}
]
}
}) {
items {
name
firstName
}
}
}
Beispielergebnisse
{
"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
mit einem bestimmten Präfix beginntAlle adventures
, bei denen _path
mit einem bestimmten Präfix (/content/dam/wknd/en/adventures/cycling
) beginnt.
Beispielabfrage
query {
adventureList(
filter: {
_path: {
_expressions: [
{
value: "/content/dam/wknd/en/adventures/cycling"
_operator: STARTS_WITH
}]
}
})
{
items {
_path
}
}
}
Beispielergebnisse
{
"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"
}
]
}
}
}
Hier wird nach einer Kombination von Feldern gefiltert. Ein AND
(implizit) wird verwendet, um den population
-Bereich auszuwählen, während ein OR
(explizit) zur Auswahl der erforderlichen Städte verwendet wird.
Beispielabfrage
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
}
}
}
Beispielergebnisse
{
"data": {
"cityList": {
"items": [
{
"name": "Stuttgart",
"population": 634830,
"country": "Germany"
},
{
"name": "Zurich",
"population": 415367,
"country": "Switzerland"
}
]
}
}
}
Diese Abfrage durchsucht alle Städte mit SAN
im Namen, unabhängig von der Groß-/Kleinschreibung.
Beispielabfrage
query {
cityList(filter: {
name: {
_expressions: [
{
value: "SAN"
_operator: CONTAINS
_ignoreCase: true
}
]
}
}) {
items {
name
population
country
}
}
}
Beispielergebnisse
{
"data": {
"cityList": {
"items": [
{
"name": "San Francisco",
"population": 883306,
"country": "USA"
},
{
"name": "San Jose",
"population": 1026350,
"country": "USA"
}
]
}
}
}
Diese Abfrage filtert ein Array nach einem Element (city:na
), das mindestens einmal vorkommen muss.
Beispielabfrage
query {
cityList(filter: {
categories: {
_expressions: [
{
value: "city:na"
_apply: AT_LEAST_ONCE
}
]
}
}) {
items {
name
population
country
categories
}
}
}
Beispielergebnisse
{
"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"
]
}
]
}
}
}
Diese Abfrage filtert nach einem exakten Array-Wert.
Beispielabfrage
query {
cityList(filter: {
categories: {
_expressions: [
{
values: [
"city:beach",
"city:na"
]
}
]
}
}) {
items {
name
population
country
categories
}
}
}
Beispielergebnisse
{
"data": {
"cityList": {
"items": [
{
"name": "San Francisco",
"population": 883306,
"country": "USA",
"categories": [
"city:beach",
"city:na"
]
}
]
}
}
}
Diese Abfrage veranschaulicht die Filterung nach person
von name
„Smith“, wobei Informationen aus zwei verschachtelten Fragmenten – company
und employee
– zurückgegeben werden.
Beispielabfrage
query {
companyList(filter: {
employees: {
_match: {
name: {
_expressions: [
{
value: "Smith"
}
]
}
}
}
}) {
items {
name
ceo {
name
firstName
}
employees {
name
firstName
}
}
}
}
Beispielergebnisse
{
"data": {
"companyList": {
"items": [
{
"name": "NextStep Inc.",
"ceo": {
"name": "Jobs",
"firstName": "Steve"
},
"employees": [
{
"name": "Smith",
"firstName": "Joe"
},
{
"name": "Lincoln",
"firstName": "Abraham"
}
]
}
]
}
}
}
Diese Abfrage veranschaulicht die Filterung von drei verschachtelten Fragmenten – company
, employee
und award
.
Beispielabfrage
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
}
}
}
}
}
Beispielergebnisse
{
"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"
}
]
}
]
}
]
}
}
}
Diese Abfrage veranschaulicht die Filterung von drei verschachtelten Fragmenten – company
, employee
und award
.
Beispielabfrage
query {
awardList(filter: {
id: {
_expressions: [
{
value:"GB"
}
]
}
}) {
items {
_metadata {
stringMetadata {
name,
value
}
}
id
title
}
}
}
Beispielergebnisse
{
"data": {
"awardList": {
"items": [
{
"_metadata": {
"stringMetadata": [
{
"name": "title",
"value": "Gameblitz Award"
},
{
"name": "description",
"value": ""
}
]
},
"id": "GB",
"title": "Gameblitz"
}
]
}
}
}
Diese Beispielabfragen basieren auf dem WKND-Projekt. Sie umfasst Folgendes:
Inhaltsfragmentmodelle verfügbar unter:
http://<hostname>:<port>/libs/dam/cfm/models/console/content/models.html/conf/wknd
Inhaltsfragmente (und anderere Inhalte) verfügbar unter:
http://<hostname>:<port>/assets.html/content/dam/wknd/en
Da die Ergebnisse sehr umfangreich sein können, werden sie hier nicht wiedergegeben.
Diese Beispielabfrage untersucht:
article
path
und author
.Beispielabfrage
{
articleList {
items {
_path
author
}
}
}
Diese Abfrage untersucht:
adventure
Beispielabfrage
{
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
}
}
}
}
}
Diese Beispielabfrage untersucht:
article
an einem bestimmten Pfad
Beispielabfrage
{
articleByPath (_path: "/content/dam/wknd/en/magazine/alaska-adventure/alaskan-adventures") {
item {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Diese Beispielabfrage untersucht:
Beispielabfrage
{
adventureByPath(_path: "/content/dam/wknd/en/adventures/riverside-camping-australia/riverside-camping-australia") {
item {
_path
adventureTitle
_model {
_path
title
}
}
}
}
Diese Abfrage untersucht:
article
an einem bestimmten Pfad
Das Feld referencearticle
hat den Datentyp fragment-reference
.
Beispielabfrage
{
adventureByPath(_path: "/content/dam/wknd-shared/en/magazine/western-australia/western-australia-by-camper-van") {
item {
_path
title
_model {
_path
title
}
}
}
}
Diese Abfrage untersucht:
bookmark
Article
Das Feld fragments
hat den Datentyp fragment-reference
, wobei das Modell Article
ausgewählt wurde. Die Abfrage liefert fragments
als ein Array von [Article]
.
{
bookmarkList {
items {
fragments {
_path
author
}
}
}
}
Diese Abfrage untersucht:
bookmark
Article
und Adventure
Das Feld fragments
hat den Datentyp fragment-reference
, wobei die Modelle Article
, Adventure
ausgewählt sind. Die Abfrage liefert fragments
als ein Array von [AllFragmentModels]
, das mit Vereinigungstyp dereferenziert wird.
{
bookmarkList {
items {
fragments {
... on ArticleModel {
_path
author
}
... on AdventureModel {
_path
adventureTitle
}
}
}
}
}
Es gibt zwei Varianten dieser Abfrage:
attachments
.Diese Abfragen untersuchen:
bookmark
Die folgende Abfrage gibt alle Inhaltsreferenzen mit _references
zurück:
{
bookmarkList {
_references {
... on ImageRef {
_path
type
height
}
... on MultimediaRef {
_path
type
size
}
... on DocumentRef {
_path
type
author
}
... on ArchiveRef {
_path
type
format
}
}
items {
_path
}
}
}
Die folgende Abfrage gibt alle attachments
zurück – ein bestimmtes Feld (Untergruppe) vom Typ content-reference
:
Das Feld attachments
hat den Datentyp content-reference
, wobei verschiedene Formen ausgewählt sind.
{
bookmarkList {
items {
attachments {
... on PageRef {
_path
type
}
... on ImageRef {
_path
width
}
... on MultimediaRef {
_path
size
}
... on DocumentRef {
_path
author
}
... on ArchiveRef {
_path
format
}
}
}
}
}
Diese Abfrage untersucht:
bookmark
an einem bestimmten Pfad
Die RTE-Inline-Verweise werden in _references
realisiert.
Beispielabfrage
{
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
}
}
}
}
Diese Abfrage untersucht:
article
an einem bestimmten Pfad
variation1
Beispielabfrage
{
articleByPath (_path: "/content/dam/wknd/en/magazine/alaska-adventure/alaskan-adventures", variation: "variation1") {
item {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Diese Abfrage untersucht:
article
mit einer bestimmten Variante: variation1
Beispielabfrage
{
articleList (variation: "variation1") {
items {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Diese Abfrage untersucht:
article
und alle VariantenBeispielabfrage
query {
articleList(
includeVariations: true ){
items {
_variation
_path
_tags
_metadata {
stringArrayMetadata {
name
value
}
}
}
}
}
Diese Abfrage untersucht:
article
mit einer oder mehreren Varianten mit dem Tag WKND : Activity / Hiking
Beispielabfrage
{
articleList(
includeVariations: true,
filter: {_tags: {_expressions: [{value: "wknd:activity/hiking", _operator: CONTAINS}]}}
){
items {
_variation
_path
_tags
_metadata {
stringArrayMetadata {
name
value
}
}
}
}
}
Diese Abfrage untersucht:
article
innerhalb des Gebietsschemas fr
Beispielabfrage
{
articleList (_locale: "fr") {
items {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Die Abfragen basieren auf der folgenden Struktur, die Folgendes verwendet:
Ein oder mehrere Beispielmodelle für Inhaltsfragmente bilden die Grundlage für die GraphQL-Schemata
Beispielinhaltsfragmente basierend auf den oben genannten Modellen
Für die Beispielabfragen verwenden wir die folgenden Inhaltsmodelle und ihre Wechselbeziehungen (Verweise ->):
Die grundlegenden Felder, die das Unternehmen definieren, sind:
Feldname | Datentyp | Verweis |
---|---|---|
Unternehmensname | Einzeiliger Text | |
CEO | Fragmentreferenz (Einzelfeld) | Person |
Mitarbeiter | Fragmentreferenz (Mehrfeld) | Person |
Die Felder, die eine Person definieren, die auch ein Mitarbeiter sein kann:
Feldname | Datentyp | Verweis |
---|---|---|
Name | Einzeiliger Text | |
Vorname | Einzeiliger Text | |
Auszeichnungen | Fragmentreferenz (Mehrfeld) | Auszeichnung |
Die Felder, die eine Auszeichnung definieren, sind:
Feldname | Datentyp | Verweis |
---|---|---|
Kürzel/Kennung | Einzeiliger Text | |
Titel | Einzeiliger Text |
Die Felder zur Definition einer Stadt sind:
Feldname | Datentyp | Verweis |
---|---|---|
Name | Einzeiliger Text | |
Land | Einzeiliger Text | |
Einwohnerzahl | Zahl | |
Kategorien | Tags |
Die folgenden Fragmente werden für das entsprechende Modell verwendet.
Unternehmensname | CEO | Mitarbeiter |
---|---|---|
Apple | Steve Jobs | Duke Marsh Max Caulfield |
Little Pony Inc. | Adam Smith | Lara Croft Cutter Slade |
NextStep Inc. | Steve Jobs | Joe Smith Abe Lincoln |
Name | Vorname | Auszeichnungen |
---|---|---|
Lincoln | Abe | |
Smith | Adam | |
Slade | Cutter | Gameblitz Gamestar |
Marsh | Duke | |
Smith | Joe | |
Croft | Lara | Gamestar |
Caulfield | Maximal | Gameblitz |
Aufträge | Steve |
Kürzel/Kennung | Titel |
---|---|
GB | Gameblitz |
GS | Gamestar |
OSC | Oscar |
Name | Land | Einwohnerzahl | Kategorien |
---|---|---|---|
Basel | Schweiz | 172258 | city:emea |
Berlin | Deutschland | 3669491 | city:capital city:emea |
Bukarest | Rumänien | 1821000 | city:capital city:emea |
San Francisco | USA | 883306 | city:beach city:na |
San José | USA | 102635 | city:na |
Stuttgart | Deutschland | 634830 | city:emea |
Zürich | Schweiz | 415367 | city:capital city:emea |