Erfahren Sie, wie Sie GraphQL mit AEM verwenden können, um Inhalte Headless bereitzustellen, indem Sie Beispielinhalte und Abfragen untersuchen.
Diese Seite sollte zusammen mit folgenden Themen gelesen werden:
Für die ersten Schritte mit GraphQL-Abfragen und deren Funktionsweise mit AEM Inhaltsfragmenten ist es hilfreich, einige praktische Beispiele anzuzeigen.
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.
Je nach Instanz können Sie direkt auf die Die mit AEM GraphQL-API enthaltene Grafik-QL-Schnittstelle zum Senden und Testen von Abfragen.
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 Schemas.
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 über alle Städte abzurufen, können Sie die grundlegende Abfrage verwenden:
Beispielabfrage
{
cityList {
items
}
}
Bei Ausführung erweitert das System die Abfrage 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 einfache Abfrage, um die name
aller Einträge in city
Schema.
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 Center"erstellen (berlin_centre
), für die city
Berlin können Sie eine Abfrage verwenden, um Details der 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
: Business
, City Break
, Holiday
City
InstanzenDann 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
für alle, die über einen Namen verfügen Jobs
oder Smith
.
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
für alle, die über einen Namen verfügen Jobs
oder Smith
.
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 eine 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 hat 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 umfangreich sein können, werden sie hier nicht reproduziert.
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
mit dem Modell Article
ausgewählt ist. Abfrage liefert fragments
als 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. Abfrage liefert fragments
als Array von [AllFragmentModels]
, der vom Vereinigungstyp ausgeschlossen 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
- ein spezifisches Feld (Untergruppe) des Typs 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
Verwenden Sie für die Beispielabfragen die folgenden Inhaltsmodelle und ihre Beziehungen (Referenzen ->):
Die grundlegenden Felder, die das Unternehmen definieren, sind:
Feldname | Datentyp | Verweis |
---|---|---|
Unternehmensname | Einzelzeilentext | |
CEO | Fragmentreferenz (Einzelfeld) | Person |
Mitarbeiter | Fragmentreferenz (Mehrfeld) | Person |
Die Felder, die eine Person definieren, die auch ein Mitarbeiter sein kann:
Feldname | Datentyp | Verweis |
---|---|---|
Name | Einzelzeilentext | |
Vorname | Einzelzeilentext | |
Auszeichnungen | Fragmentreferenz (Mehrfeld) | Auszeichnung |
Die Felder, die eine Auszeichnung definieren, sind:
Feldname | Datentyp | Verweis |
---|---|---|
Kürzel/Kennung | Einzelzeilentext | |
Titel | Einzelzeilentext |
Die Felder zur Definition einer Stadt sind:
Feldname | Datentyp | Verweis |
---|---|---|
Name | Einzelzeilentext | |
Land | Einzelzeilentext | |
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 |