Scopri come utilizzare GraphQL con AEM per distribuire contenuti headless esplorando contenuti e query di esempio.
Questa pagina deve essere letta insieme a:
Per iniziare a utilizzare le query GraphQL e a come funzionano con i frammenti di contenuto AEM, è utile visualizzare alcuni esempi pratici.
Per assistenza, consulta:
E alcuni esempi di query GraphQL, in base alla struttura del frammento di contenuto di esempio (modelli di Frammento di contenuto e frammenti di contenuto correlati).
Approfondisci queste query di esempio per le illustrazioni di creazione query, insieme ai risultati di esempio.
A seconda dell’istanza, puoi accedere direttamente al Interfaccia GraphiQL inclusa con API GraphQL AEM per l’invio e la verifica delle query.
Esempio: http://localhost:4502/content/graphiql.html
Le query di esempio si basano sulla struttura dei frammenti di contenuto di esempio da utilizzare con GraphQL
Questa query di esempio restituisce tutti types
per tutti gli schemi disponibili.
Query di esempio
{
__schema {
types {
name
description
}
}
}
Risultato di esempio
{
"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"
}
]
}
}
}
Per recuperare tutte le informazioni su tutte le città, puoi utilizzare la query di base:
Query di esempio
{
cityList {
items
}
}
Quando viene eseguita, il sistema espande automaticamente la query per includere tutti i campi:
{
cityList {
items {
_path
name
country
population
}
}
}
Risultati di esempio
{
"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
}
]
}
}
}
Questa query di esempio è una query semplice che restituisce name
di tutte le voci nella city
schema.
Query di esempio
query {
cityList {
items {
name
}
}
}
Risultati di esempio
{
"data": {
"cityList": {
"items": [
{
"name": "Basel"
},
{
"name": "Berlin"
},
{
"name": "Bucharest"
},
{
"name": "San Francisco"
},
{
"name": "San Jose"
},
{
"name": "Stuttgart"
},
{
"name": "Zurich"
}
]
}
}
}
Questa query di esempio è una query che restituisce i dettagli di una singola voce di frammento in una posizione specifica nell’archivio.
Query di esempio
{
cityByPath (_path: "/content/dam/sample-content-fragments/cities/berlin") {
item {
_path
name
country
population
categories
}
}
}
Risultati di esempio
{
"data": {
"cityByPath": {
"item": {
"_path": "/content/dam/sample-content-fragments/cities/berlin",
"name": "Berlin",
"country": "Germany",
"population": 3669491,
"categories": [
"city:capital",
"city:emea"
]
}
}
}
}
Se crei una variante denominata "Berlino centro" (berlin_centre
), per city
Berlino, puoi utilizzare una query per restituire i dettagli della variante.
Query di esempio
{
cityList (variation: "berlin_center") {
items {
_path
name
country
population
categories
}
}
}
Risultati di esempio
{
"data": {
"cityList": {
"items": [
{
"_path": "/content/dam/sample-content-fragments/cities/berlin",
"name": "Berlin",
"country": "Germany",
"population": 3669491,
"categories": [
"city:capital",
"city:emea"
]
}
]
}
}
}
Se:
Tourism
: Business
, City Break
, Holiday
City
istanzeQuindi puoi utilizzare una query per restituire i dettagli del name
e tags
di tutte le voci contrassegnate come interruzioni di città nel city
schema.
Query di esempio
query {
cityList(
includeVariations: true,
filter: {_tags: {_expressions: [{value: "tourism:city-break", _operator: CONTAINS}]}}
){
items {
name,
_tags
}
}
}
Risultati di esempio
{
"data": {
"cityList": {
"items": [
{
"name": "Berlin",
"_tags": [
"tourism:city-break",
"tourism:business"
]
},
{
"name": "Zurich",
"_tags": [
"tourism:city-break",
"tourism:business"
]
}
]
}
}
}
Utilizzando la struttura dei frammenti nidificati, questa query restituisce tutti i dettagli del CEO e di tutti i dipendenti di una società.
Query di esempio
query {
companyList {
items {
name
ceo {
_path
name
firstName
awards {
id
title
}
}
employees {
name
firstName
awards {
id
title
}
}
}
}
}
Risultati di esempio
{
"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": []
}
]
}
]
}
}
}
Questa query di esempio filtra tutti persons
per qualsiasi che ha il nome Jobs
o Smith
.
Query di esempio
query {
personList(filter: {
name: {
_logOp: OR
_expressions: [
{
value: "Jobs"
},
{
value: "Smith"
}
]
}
}) {
items {
name
firstName
}
}
}
Risultati di esempio
{
"data": {
"personList": {
"items": [
{
"name": "Smith",
"firstName": "Adam"
},
{
"name": "Smith",
"firstName": "Joe"
},
{
"name": "Jobs",
"firstName": "Steve"
}
]
}
}
}
Questa query di esempio filtra tutti persons
per qualsiasi che ha il nome Jobs
o Smith
.
Query di esempio
query {
personList(filter: {
name: {
_expressions: [
{
value: "Jobs"
_operator: EQUALS_NOT
}
]
}
}) {
items {
name
firstName
}
}
}
Risultati di esempio
{
"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
inizia con un prefisso specificoTutte le adventures
il cui _path
inizia con un prefisso specifico (/content/dam/wknd/en/adventures/cycling
).
Query di esempio
query {
adventureList(
filter: {
_path: {
_expressions: [
{
value: "/content/dam/wknd/en/adventures/cycling"
_operator: STARTS_WITH
}]
}
})
{
items {
_path
}
}
}
Risultati di esempio
{
"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"
}
]
}
}
}
In questo caso, viene filtrata una combinazione di campi. Viene utilizzato un AND
(implicito) per selezionare l’intervallo di population
, mentre un OR
(esplicito) viene utilizzato per selezionare le città richieste.
Query di esempio
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
}
}
}
Risultati di esempio
{
"data": {
"cityList": {
"items": [
{
"name": "Stuttgart",
"population": 634830,
"country": "Germany"
},
{
"name": "Zurich",
"population": 415367,
"country": "Switzerland"
}
]
}
}
}
Questa query interroga tutte le città che hanno SAN
nel nome, indipendentemente dalla maiuscola.
Query di esempio
query {
cityList(filter: {
name: {
_expressions: [
{
value: "SAN"
_operator: CONTAINS
_ignoreCase: true
}
]
}
}) {
items {
name
population
country
}
}
}
Risultati di esempio
{
"data": {
"cityList": {
"items": [
{
"name": "San Francisco",
"population": 883306,
"country": "USA"
},
{
"name": "San Jose",
"population": 1026350,
"country": "USA"
}
]
}
}
}
Questa query filtra un array con un elemento (city:na
) che deve verificarsi almeno una volta.
Query di esempio
query {
cityList(filter: {
categories: {
_expressions: [
{
value: "city:na"
_apply: AT_LEAST_ONCE
}
]
}
}) {
items {
name
population
country
categories
}
}
}
Risultati di esempio
{
"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"
]
}
]
}
}
}
Questa query filtra un determinato valore di array.
Query di esempio
query {
cityList(filter: {
categories: {
_expressions: [
{
values: [
"city:beach",
"city:na"
]
}
]
}
}) {
items {
name
population
country
categories
}
}
}
Risultati di esempio
{
"data": {
"cityList": {
"items": [
{
"name": "San Francisco",
"population": 883306,
"country": "USA",
"categories": [
"city:beach",
"city:na"
]
}
]
}
}
}
Questa query illustra il filtro per qualsiasi person
di name
“Smith” e restituisce informazioni da due frammenti nidificati, company
e employee
.
Query di esempio
query {
companyList(filter: {
employees: {
_match: {
name: {
_expressions: [
{
value: "Smith"
}
]
}
}
}
}) {
items {
name
ceo {
name
firstName
}
employees {
name
firstName
}
}
}
}
Risultati di esempio
{
"data": {
"companyList": {
"items": [
{
"name": "NextStep Inc.",
"ceo": {
"name": "Jobs",
"firstName": "Steve"
},
"employees": [
{
"name": "Smith",
"firstName": "Joe"
},
{
"name": "Lincoln",
"firstName": "Abraham"
}
]
}
]
}
}
}
Questa query illustra il filtraggio su tre frammenti nidificati: company
, employee
e award
.
Query di esempio
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
}
}
}
}
}
Risultati di esempio
{
"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"
}
]
}
]
}
]
}
}
}
Questa query illustra il filtraggio su tre frammenti nidificati: company
, employee
e award
.
Query di esempio
query {
awardList(filter: {
id: {
_expressions: [
{
value:"GB"
}
]
}
}) {
items {
_metadata {
stringMetadata {
name,
value
}
}
id
title
}
}
}
Risultati di esempio
{
"data": {
"awardList": {
"items": [
{
"_metadata": {
"stringMetadata": [
{
"name": "title",
"value": "Gameblitz Award"
},
{
"name": "description",
"value": ""
}
]
},
"id": "GB",
"title": "Gameblitz"
}
]
}
}
}
Queste query di esempio si basano sul progetto WKND. Presenta le seguenti caratteristiche:
Modelli di Frammento di contenuto disponibili in:
http://<hostname>:<port>/libs/dam/cfm/models/console/content/models.html/conf/wknd
Frammenti di contenuto (e altro contenuto) disponibili in:
http://<hostname>:<port>/assets.html/content/dam/wknd/en
Poiché i risultati possono essere estesi, non vengono riprodotti qui.
Questa query di esempio rappresenta un’interrogazione per ottenere:
article
path
e author
.Query di esempio
{
articleList {
items {
_path
author
}
}
}
Questa query rappresenta un’interrogazione per ottenere:
adventure
Query di esempio
{
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
}
}
}
}
}
Questa query di esempio rappresenta un’interrogazione per ottenere:
article
in un percorso specifico
Query di esempio
{
articleByPath (_path: "/content/dam/wknd/en/magazine/alaska-adventure/alaskan-adventures") {
item {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Questa query di esempio rappresenta un’interrogazione per ottenere:
Query di esempio
{
adventureByPath(_path: "/content/dam/wknd/en/adventures/riverside-camping-australia/riverside-camping-australia") {
item {
_path
adventureTitle
_model {
_path
title
}
}
}
}
Questa query rappresenta un’interrogazione per ottenere:
article
in un percorso specifico
Il campo referencearticle
include il tipo di dati fragment-reference
.
Query di esempio
{
adventureByPath(_path: "/content/dam/wknd-shared/en/magazine/western-australia/western-australia-by-camper-van") {
item {
_path
title
_model {
_path
title
}
}
}
}
Questa query rappresenta un’interrogazione per ottenere:
bookmark
Article
Il campo fragments
ha il tipo di dati fragment-reference
, con il modello Article
selezionato. Consegne di query fragments
come array di [Article]
.
{
bookmarkList {
items {
fragments {
_path
author
}
}
}
}
Questa query rappresenta un’interrogazione per ottenere:
bookmark
Article
e Adventure
Il campo fragments
include il tipo di dati fragment-reference
, con i modelli Article
, Adventure
selezionati. Consegne di query fragments
come array di [AllFragmentModels]
, a cui viene fatto riferimento con il tipo di unione.
{
bookmarkList {
items {
fragments {
... on ArticleModel {
_path
author
}
... on AdventureModel {
_path
adventureTitle
}
}
}
}
}
Sono disponibili due tipi di questa query:
attachments
.Tali query rappresentano interrogazioni per ottenere:
bookmark
La query seguente restituisce tutti i riferimenti di contenuto utilizzando _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
}
}
}
La query seguente restituisce tutti attachments
- un campo specifico (sottogruppo) di tipo content-reference
:
Il campo attachments
include il tipo di dati content-reference
, con diversi moduli selezionati.
{
bookmarkList {
items {
attachments {
... on PageRef {
_path
type
}
... on ImageRef {
_path
width
}
... on MultimediaRef {
_path
size
}
... on DocumentRef {
_path
author
}
... on ArchiveRef {
_path
format
}
}
}
}
}
Questa query rappresenta un’interrogazione per ottenere:
bookmark
in un percorso specifico
I riferimenti dell’editor Rich Text in linea vengono popolati in _references
.
Query di esempio
{
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
}
}
}
}
Questa query rappresenta un’interrogazione per ottenere:
article
in un percorso specifico
variation1
Query di esempio
{
articleByPath (_path: "/content/dam/wknd/en/magazine/alaska-adventure/alaskan-adventures", variation: "variation1") {
item {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Questa query rappresenta un’interrogazione per ottenere:
article
con una variante specifica: variation1
Query di esempio
{
articleList (variation: "variation1") {
items {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Questa query rappresenta un’interrogazione:
article
e tutte le variantiQuery di esempio
query {
articleList(
includeVariations: true ){
items {
_variation
_path
_tags
_metadata {
stringArrayMetadata {
name
value
}
}
}
}
}
Questa query rappresenta un’interrogazione:
article
con una o più varianti contrassegnate dal tag WKND : Activity / Hiking
Query di esempio
{
articleList(
includeVariations: true,
filter: {_tags: {_expressions: [{value: "wknd:activity/hiking", _operator: CONTAINS}]}}
){
items {
_variation
_path
_tags
_metadata {
stringArrayMetadata {
name
value
}
}
}
}
}
Questa query rappresenta un’interrogazione per ottenere:
article
all’interno della lingua fr
Query di esempio
{
articleList (_locale: "fr") {
items {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Le query di esempio si basano sulla seguente struttura, che utilizza:
Uno o più modelli per frammenti di contenuto di esempio: costituisce la base per gli schemi GraphQL
Frammenti di contenuto di esempio basati sui modelli di cui sopra
Per le query di esempio, utilizza i seguenti modelli di contenuto e le relative interrelazioni (riferimenti ->):
Azienda
-> Utente
-> Riconoscimento
I campi di base che definiscono l’azienda sono:
Nome campo | Tipo di dati | Riferimento |
---|---|---|
Nome dell’azienda | Testo su riga singola | |
CEO | Riferimento frammento (singolo) | Persona |
Dipendenti | Riferimento frammento (con più campi) | Persona |
I campi che definiscono un’utente, che può anche essere un dipendente:
Nome campo | Tipo di dati | Riferimento |
---|---|---|
Nome | Testo su riga singola | |
Nome | Testo su riga singola | |
Premi | Riferimento frammento (con più campi) | Riconoscimento |
I campi che definiscono un riconoscimento sono:
Nome campo | Tipo di dati | Riferimento |
---|---|---|
Scelta rapida/ID | Testo su riga singola | |
Titolo | Testo su riga singola |
I campi per la definizione di una città sono:
Nome campo | Tipo di dati | Riferimento |
---|---|---|
Nome | Testo su riga singola | |
Paese | Testo su riga singola | |
Popolazione | Numero | |
Categorie | Tag |
I frammenti seguenti vengono utilizzati per il modello appropriato.
Nome dell’azienda | CEO | Dipendenti |
---|---|---|
Apple | Steve Jobs | Duke Marsh Max Caulfield |
Little Pony Inc. | Adam Smith | Lara Croft Cutter Slade |
NextStep Inc. | Steve Jobs | Joe Smith Abe Lincoln |
Nome | Nome | Premi |
---|---|---|
Lincoln | Abe | |
Smith | Adam | |
Slade | Cutter | Gameblitz Gamestar |
Marsh | Duke | |
Smith | Joe | |
Croft | Lara | Gamestar |
Caulfield | Max | Gameblitz |
Jobs | Steve |
Scelta rapida/ID | Titolo |
---|---|
GB | Gameblitz |
GS | Gamestar |
OSC | Oscar |
Nome | Paese | Popolazione | Categorie |
---|---|---|---|
Basilea | Svizzera | 172258 | city:emea |
Berlino | Germania | 3669491 | city:capital city:emea |
Bucarest | Romania | 1821000 | city:capital city:emea |
San Francisco | USA | 883306 | city:beach city:na |
San Jose | USA | 102635 | city:na |
Stoccarda | Germania | 634830 | city:emea |
Zurigo | Svizzera | 415367 | city:capital city:emea |