L'API AEM GraphQL per la distribuzione dei frammenti di contenuto è disponibile su richiesta.
Per abilitare l'API per il AEM come programma di Cloud Service, contattate il supporto di Adobe.
Per iniziare a utilizzare le query GraphQL e come funzionano con AEM frammenti di contenuto, è possibile vedere alcuni esempi pratici.
Per assistenza, consulta:
Alcune query GraphQL di esempio basate sulla struttura del frammento di contenuto di esempio (Modelli di frammenti di contenuto e frammenti di contenuto correlati).
Il funzionamento di base delle query con GraphQL per AEM aderire alla specifica GraphQL standard. Per le query GraphQL con AEM esistono alcune estensioni:
Se si richiede un singolo risultato:
Se si prevede un elenco di risultati:
cityList
Se si desidera utilizzare un OR logico:
Esiste anche un AND logico, ma è (spesso) implicito
È possibile eseguire query sui nomi dei campi corrispondenti ai campi all'interno del modello di frammento di contenuto
Oltre ai campi del modello, sono presenti alcuni campi generati dal sistema (preceduti dal carattere di sottolineatura):
Per il contenuto:
_locale
: rivelare la lingua; basato su Language Manager
_metadata
: visualizzazione dei metadati per il frammento
_path
: percorso del frammento di contenuto all'interno dell'archivio
_references
: rivelare i riferimenti; inclusione di riferimenti in linea nell'Editor Rich Text
_variations
: per visualizzare specifiche varianti all’interno del frammento di contenuto
E operazioni:
_operator
: applicare operatori specifici; EQUALS
, EQUALS_NOT
, GREATER_EQUAL
, LOWER
, CONTAINS
,
_apply
: applicare condizioni specifiche; ad esempio, AT_LEAST_ONCE
_ignoreCase
: per ignorare il caso durante la query
I tipi di unione GraphQL sono supportati:
...on
Per un semplice esempio è necessario:
Uno o più modelli di frammenti di contenuto di esempio - costituiscono la base per gli schemi GraphQL
Esempio di frammenti di contenuto basati sui modelli precedenti
Per le query di esempio, verranno utilizzati i seguenti modelli di contenuto e le relative interrelazioni (riferimenti ->):
I campi di base che definiscono la società sono:
Nome campo | Tipo di dati | Riferimento |
---|---|---|
Nome società | Testo su riga singola | |
Direttore Generale | Riferimento frammento (singolo) | Person |
Dipendenti | Riferimento frammento (campo multiplo) | Person |
Campi che definiscono una persona, che può anche essere un dipendente:
Nome campo | Tipo di dati | Riferimento |
---|---|---|
Nome | Testo su riga singola | |
Nome | Testo su riga singola | |
Awards | Riferimento frammento (campo multiplo) | Award |
I campi che definiscono un premio sono:
Nome campo | Tipo di dati | Riferimento |
---|---|---|
Collegamento/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 |
Per il modello appropriato vengono utilizzati i seguenti frammenti.
Nome società | Direttore Generale | Dipendenti |
---|---|---|
Apple | Steve Jobs | Duke Marsh Max Caulfield |
Little Pony Inc. | Adam Smith | Lara Croft Sfera di taglio |
NextStep Inc. | Steve Jobs | Joe Smith Abe Lincoln |
Nome | Nome | Awards |
---|---|---|
Lincoln | Abe | |
Smith | Adam | |
Slade | Cutter | Gameblitz Gamestar |
Palude | Duke | |
Smith | Joe | |
Croft | Lara | Gamestar |
Caulfield | Max | Gameblitz |
Processi | Steve |
Collegamento/ID | Titolo |
---|---|
GB | Gameblitz |
GS | Gamestar |
OSC | Oscar |
Nome | Paese | Popolazione | Categorie |
---|---|---|---|
Basilea | Svizzera | 172258 | città:emea |
Berlino | Germania | 3669491 | città:capitale città:emea |
Bucarest | Romania | 1821000 | città:capitale città:emea |
San Francisco | USA | 883306 | città:spiaggia città:na |
San Jose | USA | 102635 | città:na |
Stoccarda | Germania | 634830 | città:emea |
Zurigo | Svizzera | 415367 | città:capitale città:emea |
Consultate le query di esempio per le illustrazioni delle query di creazione, insieme ai risultati di esempio.
A seconda dell'istanza in uso è possibile accedere direttamente all'interfaccia Graph i QL inclusa con AEM GraphQL API per l'invio e il test delle query.
Esempio: http://localhost:4502/content/graphiql.html
Questo restituirà tutti i tipi per tutti gli schemi disponibili.
Query di esempio
{
__schema {
types {
name
description
}
}
}
Risultato campione
{
"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"
}
]
}
}
}
Utilizzando la struttura dei frammenti nidificati, questa query restituisce i dettagli completi dell'amministratore delegato di una società e di tutti i relativi dipendenti.
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": []
}
]
}
]
}
}
}
Per recuperare tutte le informazioni su tutte le città, è possibile utilizzare la query di base:
Query di esempio
{
cityList {
items
}
}
Una volta eseguita, il sistema espanderà 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
}
]
}
}
}
Si tratta di una semplice query per restituire la name
di tutte le voci nello schema 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"
}
]
}
}
}
Si tratta di una query per restituire 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 si crea una nuova variante, denominata "Berlin Center" (berlin_centre
), per city
Berlino, è possibile 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"
]
}
]
}
}
}
Questo filtrerà tutti i persons
per tutti quelli che hanno 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"
}
]
}
}
}
Questo filtrerà tutti i persons
per tutti quelli che hanno 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"
}
]
}
}
}
Qui viene filtrata una combinazione di campi. Per selezionare l'intervallo AND
(implicito) viene utilizzato un population
, mentre viene utilizzato un OR
(esplicito) 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 dal caso.
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 su una matrice 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 valore di matrice esatto.
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 filtraggio per qualsiasi person
di name
"Smith", restituendo 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 tra 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 tra 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.
Poiché i risultati possono essere estesi, non sono riportati qui.
Questa query di esempio interroga:
article
path
e author
.Query di esempio
{
articleList {
items {
_path
author
}
}
}
Questa query interroga:
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 interroga:
Query di esempio
{
articleByPath (_path: "/content/dam/wknd/en/magazine/alaska-adventure/alaskan-adventures") {
item {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Query di esempio
{
articleByPath (_path: "/content/dam/wknd/en/magazine/skitouring/skitouring") {
item {
_path
author
referencearticle {
_path
author
}
}
}
}
{
bookmarkList {
items {
fragments {
... on ArticleModel {
_path
author
}
... on AdventureModel {
_path
adventureTitle
}
}
}
}
}
{
bookmarkList {
items {
attachments {
... on PageRef {
_path
type
}
... on ImageRef {
_path
width
}
... on MultimediaRef {
_path
size
}
... on DocumentRef {
_path
author
}
... on ArchiveRef {
_path
format
}
}
}
}
}
{
bookmarkList {
_references {
... on ImageRef {
_path
type
height
}
... on MultimediaRef {
_path
type
size
}
... on DocumentRef {
_path
type
author
}
... on ArchiveRef {
_path
type
format
}
}
}
}
Query di esempio
{
articleByPath (_path: "/content/dam/wknd/en/magazine/alaska-adventure/alaskan-adventures", variation: "variation1") {
item {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Query di esempio
{
articleList (_locale: "fr") {
items {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
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
}
}
}
}
Query di esempio
{
articleList (variation: "variation1") {
items {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}