Scopri come utilizzare Frammenti di contenuto in Adobe Experience Manager (AEM) as a Cloud Service con l’API GraphQL AEM per la consegna di contenuti headless.
L’API GraphQL AEM as a Cloud Service utilizzata con i Frammenti di contenuto è pesantemente basata sull’API GraphQL standard open source.
L’utilizzo dell’API GraphQL in AEM consente la consegna efficiente di Frammenti di contenuto ai client JavaScript in implementazioni CMS headless:
GraphQL è attualmente utilizzato in due scenari (separati) in Adobe Experience Manager (AEM) as a Cloud Service:
GraphQL è:
“…un linguaggio di query per le API e un runtime per l’esecuzione di tali query con i dati esistenti. GraphQL fornisce una descrizione completa e comprensibile dei dati nell’API, offre ai clienti la possibilità di chiedere esattamente ciò di cui hanno bisogno e niente di più, semplifica l’evoluzione delle API nel tempo e abilita potenti strumenti per gli sviluppatori.”.
Vedi GraphQL.org
“…una specifica aperta per un livello API flessibile. Posiziona GraphQL sui backend esistenti per costruire prodotti più rapidamente che mai…”.
Vedi Esplorare GraphQL.
“…un linguaggio e una specifica di query di dati sviluppati internamente da Facebook nel 2012 prima di essere resi open source nel 2015. Offre un’alternativa alle architetture basate su REST allo scopo di aumentare la produttività degli sviluppatori e ridurre al minimo le quantità di dati trasferiti. GraphQL viene utilizzato in produzione da centinaia di organizzazioni di tutte le dimensioni…”
Vedi GraphQL Foundation.
Per ulteriori informazioni sull’API GraphQL, consulta le sezioni seguenti (tra molte altre risorse):
In graphql.org:
In graphql.com:
L’implementazione di GraphQL per AEM si basa sulla libreria Java GraphQL standard. Consulta:
GraphQL utilizza quanto segue:
Il percorso in AEM che risponde alle query GraphQL e fornisce accesso agli schemi GraphQL.
Consulta Abilitazione dell’endpoint GraphQL per ulteriori dettagli.
Consulta(GraphQL.org) Introduzione a GraphQL per informazioni complete, che comprendono le Best practice.
Con GraphQL è possibile eseguire query per ottenere:
Un ingresso singolo
AEM fornisce funzionalità per convertire le query (entrambi i tipi) in Query persistenti, che possono essere memorizzate nella cache da Dispatcher e dalla rete CDN.
La Query persistenti sono il metodo consigliato da utilizzare nelle istanze di pubblicazione come:
Di solito non esiste un dispatcher/CDN sull’autore, quindi non c’è alcun guadagno nell’utilizzo di query persistenti lì; oltre a testarli.
Le query GraphQL che utilizzano richieste POST non sono consigliate in quanto non sono memorizzate nella cache, pertanto in un’istanza predefinita Dispatcher è configurato per bloccare tali query.
Anche se GraphQL supporta anche le richieste GET, possono raggiungere i limiti (ad esempio la lunghezza dell’URL) che possono essere evitati utilizzando le query persistenti.
Per consentire query dirette e/o POST in Dispatcher, puoi chiedere all’amministratore di sistema di:
ENABLE_GRAPHQL_ENDPOINT
true
In futuro, la capacità di eseguire query dirette potrebbe diventare obsoleta.
Puoi testare ed eseguire il debug delle query GraphQL utilizzando IDE GraphiQL.
I casi di utilizzo possono dipendere dal tipo di ambiente AEM as a Cloud Service:
ambiente di pubblicazione; utilizzato per:
ambiente di authoring; utilizzato per:
Le autorizzazioni sono quelle necessarie per accedere ad Assets.
Le query GraphQL vengono eseguite con l'autorizzazione dell'utente AEM della richiesta sottostante. Se l’utente non dispone dell’accesso in lettura ad alcuni frammenti (memorizzati come risorse), non farà parte del set di risultati.
Inoltre, l’utente deve avere accesso a un endpoint GraphQL per poter eseguire query GraphQL.
GraphQL è un’API fortemente tipizzata, il che significa che i dati devono essere chiaramente strutturati e organizzati per tipo.
La specifica GraphQL fornisce una serie di linee guida su come creare una solida API per l’interrogazione dei dati su una determinata istanza. A questo scopo, un client deve recuperare lo Schema, che contiene tutti i tipi necessari per una query.
Per quanto riguarda i Frammenti di contenuto, gli schemi GraphQL (struttura e tipi) sono basati su modelli di Frammenti di contenuto abilitati e i relativi tipi di dati.
Tutti gli schemi GraphQL (derivati dai modelli di Frammenti di contenuto che sono stati abilitati) sono leggibili attraverso l’endpoint GraphQL.
Ciò significa che devi assicurarti che non siano disponibili dati sensibili, che in questo modo potrebbero trapelare; ad esempio, informazioni che potrebbero essere presenti come nomi di campo nella definizione del modello.
Ad esempio, se un utente ha creato un modello di frammento di contenuto denominato Article
, quindi AEM genera un tipo GraphQL ArticleModel
. I campi all’interno di questo tipo corrispondono ai campi e ai tipi di dati definiti nel modello. Inoltre, crea alcuni punti di ingresso per le query che operano su questo tipo, come articleByPath
o articleList
.
Modello di Frammento di contenuto:
Lo schema GraphQL corrispondente (output dalla documentazione automatica GraphiQL):
Questo mostra che il tipo ArticleModel
generato contiene diversi campi.
Tre di essi sono stati controllati dall’utente: author
, main
e referencearticle
.
Gli altri campi sono stati aggiunti automaticamente da AEM e rappresentano metodi utili per fornire informazioni su un determinato frammento di contenuto; in questo esempio, campi di supporto) _path
, _metadata
, _variations
.
Un Frammento di contenuto basato sul modello di articolo creato da un utente può essere interrogato tramite GraphQL. Per esempi, consulta la sezione Query di esempio (basata su una struttura di Frammento di contenuto di esempio da utilizzare con GraphQL).
In GraphQL per AEM, lo schema è flessibile. Ciò significa che viene generato automaticamente ogni volta che viene creato, aggiornato o eliminato un modello di Frammento di contenuto. Le cache dello schema dati vengono aggiornate anche quando si rivede un modello di Frammento di contenuto.
Le cache dello schema dati vengono aggiornate anche quando si rivede un modello di Frammento di contenuto.
Il servizio GraphQL di Sites ascolta (in background) le modifiche apportate a un modello di Frammento di contenuto. Quando vengono rilevati aggiornamenti, viene rigenerata solo la parte dello schema. Questa ottimizzazione consente di risparmiare tempo e garantisce stabilità.
Ad esempio, se:
installi un pacchetto contenente Content-Fragment-Model-1
e Content-Fragment-Model-2
:
Model-1
e Model-2
.Poi modifica Content-Fragment-Model-2
:
verrà aggiornato solo il tipo GraphQL Model-2
.
Mentre Model-1
rimarrà lo stesso.
Questo è importante da notare nel caso in cui desideri eseguire aggiornamenti in blocco sui modelli di Frammento di contenuto tramite l’API REST o in altro modo.
Lo schema viene gestito attraverso lo stesso endpoint delle query GraphQL, dove il client gestisce il fatto che lo schema viene chiamato con l’estensione GQLschema
. Ad esempio, l’esecuzione di una semplice richiesta GET
di /content/cq:graphql/global/endpoint.GQLschema
si tradurrà nell’output dello schema con il tipo di contenuto: text/x-graphql-schema;charset=iso-8859-1
.
Quando i frammenti di contenuto sono nidificati, può accadere che venga pubblicato un modello di Frammento di contenuto principale, ma non il modello di riferimento.
L’interfaccia utente AEM impedisce che ciò accada, ma se la pubblicazione viene effettuata a livello di programmazione o con pacchetti di contenuto può verificarsi.
In questo caso, AEM genera uno schema incompleto per il modello di Frammento di contenuto principale. Ciò significa che il Riferimento al frammento, che dipende dal modello non pubblicato, viene rimosso dallo schema.
Nello schema sono presenti singoli campi, di due categorie di base:
Campi generati dall’utente.
Selezione di Tipi di dati vengono utilizzati per creare campi in base alla modalità di configurazione del modello di frammento di contenuto. I nomi dei campi vengono ricavati dal Nome proprietà campo Tipo di dati scheda .
multifield
dal menu a discesa .GraphQL per AEM genera anche una serie di campi di supporto.
GraphQL per AEM supporta un elenco di tipi. Vengono rappresentati tutti i tipi di dati dei modelli di Frammento di contenuto supportati e i corrispondenti tipi GraphQL:
Modello di Frammento di contenuto: tipo di dati | Tipo GraphQL | Descrizione |
---|---|---|
Testo su riga singola | Stringa, [Stringa] | Utilizzato per stringhe semplici come nomi di autore, nomi di posizione, ecc. |
Testo su più righe | Stringa, [Stringa] | Utilizzato per l’output di testo, ad esempio il corpo di un articolo |
Numero | Mobile, [Mobile] | Utilizzato per visualizzare il numero a virgola mobile e i numeri regolari |
Booleano | Booleano | Utilizzato per visualizzare le caselle di controllo → semplici istruzioni true/false |
Data e ora | Calendario | Utilizzato per visualizzare la data e l’ora in formato ISO 8601. A seconda del tipo selezionato, sono disponibili tre versioni da utilizzare in AEM GraphQL: onlyDate , onlyTime , dateTime |
Enumerazione | Stringa | Utilizzato per visualizzare un’opzione da un elenco di opzioni definito durante la creazione del modello |
Tag | [Stringa] | Utilizzato per visualizzare un elenco di stringhe che rappresentano tag utilizzati in AEM |
Riferimento contenuto | Stringa, [Stringa] | Utilizzato per visualizzare il percorso per un’altra risorsa in AEM |
Riferimento frammento | Un tipo di modello | Utilizzato per fare riferimento ad altri frammenti di contenuto di un determinato tipo di modello, definito al momento della creazione del modello |
Oltre ai tipi di dati per i campi generati dall’utente, GraphQL for AEM genera anche una serie di campi di supporto per consentire l’identificazione di un frammento di contenuto o per fornire informazioni aggiuntive su un frammento di contenuto.
Tali campi di supporto sono contrassegnati con un _
per distinguere tra ciò che è stato definito dall’utente e ciò che è stato generato automaticamente.
Il campo percorso viene utilizzato come identificatore in AEM GraphQL. Rappresenta il percorso della risorsa Frammenti di contenuto all’interno dell’archivio AEM. Questo è l’identificatore di un frammento di contenuto, in quanto:
Il codice seguente visualizza i percorsi di tutti i frammenti di contenuto creati in base al modello di frammento di contenuto Author
, come fornito dall’esercitazione WKND .
{
authorList {
items {
_path
}
}
}
Inoltre, per recuperare un singolo frammento di contenuto di un tipo specifico, è necessario determinarne prima il percorso. Esempio:
{
authorByPath(_path: "/content/dam/wknd-shared/en/contributors/sofia-sj-berg") {
item {
_path
firstName
lastName
}
}
}
Vedi Query di esempio: un singolo frammento di città specifico.
Tramite GraphQL, AEM espone inoltre i metadati di un frammento di contenuto. I metadati sono informazioni che descrivono un frammento di contenuto, ad esempio il titolo di un frammento di contenuto, il percorso delle miniature, la descrizione di un frammento di contenuto, la data di creazione, tra gli altri.
Poiché i metadati vengono generati tramite l’Editor schemi e, pertanto, non dispongono di una struttura specifica, il tipo di TypedMetaData
GraphQL è stato implementato per esporre i metadati di un frammento di contenuto. TypedMetaData
espone le informazioni raggruppate per i seguenti tipi scalari:
Campo |
---|
stringMetadata:[StringMetadata]! |
stringArrayMetadata:[StringArrayMetadata]! |
intMetadata:[IntMetadata]! |
intArrayMetadata:[IntArrayMetadata]! |
floatMetadata:[FloatMetadata]! |
floatArrayMetadata:[FloatArrayMetadata]! |
booleanMetadata:[BooleanMetadata]! |
booleanArrayMetadata:[booleanArrayMetadata]! |
calendarMetadata:[CalendarMetadata]! |
calendarArrayMetadata:[CalendarArrayMetadata]! |
Ogni tipo scalare rappresenta una coppia nome-valore singola o un array di coppie nome-valore, in cui il valore di tale coppia è del tipo all'interno del quale è stato raggruppato.
Ad esempio, se vuoi recuperare il titolo di un frammento di contenuto, si tratta di una proprietà stringa, pertanto è necessario eseguire una query per tutti i metadati stringa:
Per eseguire una query per i metadati:
{
authorByPath(_path: "/content/dam/wknd-shared/en/contributors/sofia-sj-berg") {
item {
_metadata {
stringMetadata {
name
value
}
}
}
}
}
Puoi visualizzare tutti i tipi di metadati GraphQL se visualizzi lo schema GraphQL generato. Tutti i tipi di modello hanno lo stesso TypedMetaData
.
Differenza tra metadati normali e quelli di array
Nota: StringMetadata
e StringArrayMetadata
si riferiscono a ciò che è memorizzato nell’archivio, non alla modalità di recupero.
Ad esempio, effettuando una chiamata del campo stringMetadata
, può essere restituito un array di tutti i metadati memorizzati nell’archivio come una String
; se si effettua una chiamata dell’stringArrayMetadata
può essere restituito un array di tutti i metadati memorizzati nell’archivio come String[]
.
Vedi Query di esempio per metadati: elenca i metadati per riconoscimenti con titolo GB.
Il campo _variations
è stato implementato per semplificare l’esecuzione delle query sulle varianti di un frammento di contenuto. Esempio:
{
authorByPath(_path: "/content/dam/wknd-shared/en/contributors/ian-provo") {
item {
_variations
}
}
}
Tieni presente che _variations
il campo non contiene un master
variazione, tecnicamente, dei dati originali (a cui si fa riferimento come Master nell’interfaccia utente) non è considerata una variante esplicita.
Vedi Query di esempio: tutte le città con una variante denominata.
Se la variante specificata non esiste per un frammento di contenuto, i dati originali (noti anche come variante principale) verranno restituiti come impostazione predefinita (fallback).
GraphQL consente di inserire variabili nella query. Per ulteriori informazioni, consulta la documentazione di GraphQL per variabili.
Ad esempio, per ottenere tutti i frammenti di contenuto di tipo Author
in una specifica variante (se disponibile), puoi specificare l’argomento variation
in GraphiQL.
Query:
query($variation: String!) {
authorList(variation: $variation) {
items {
_variation
lastName
firstName
}
}
}
Variabili di query:
{
"variation": "another"
}
Questa query restituirà l’elenco completo degli autori. Autori senza another
la variazione torna ai dati originali (_variation
riferirà master
in questo caso).
Se desideri limitare l’elenco agli autori che forniscono la variante specificata (e saltare gli autori che ritornano ai dati originali), devi applicare un filter:
query($variation: String!) {
authorList(variation: $variation, filter: {
_variation: {
_expressions: {
value: $variation
}
}
}) {
items {
_variation
lastName
firstName
}
}
}
In GraphQL è possibile modificare le query basate su variabili, denominate Direttive GraphQL.
Ad esempio, puoi includere il campo adventurePrice
in una query per tutti i AdventureModels
basati su una variabile includePrice
.
Query:
query GetAdventureByType($includePrice: Boolean!) {
adventureList {
items {
title
price @include(if: $includePrice)
}
}
}
Variabili di query:
{
"includePrice": true
}
Puoi inoltre utilizzare il filtro nelle query GraphQL per restituire dati specifici.
Il filtro utilizza una sintassi basata su operatori ed espressioni di tipo logico.
La parte più atomica è una singola espressione che può essere applicata al contenuto di un determinato campo. Confronta il contenuto del campo con un valore costante specificato.
Ad esempio, l'espressione
{
value: "some text"
_op: EQUALS
}
confronta il contenuto del campo con il valore some text
ed ha successo se il contenuto è uguale al valore . In caso contrario, l’espressione avrà esito negativo.
Le azioni
Per confrontare i campi con un determinato valore è possibile utilizzare i seguenti operatori:
Operatore | Tipo/i | L’espressione ha esito positivo se … |
---|---|---|
EQUALS |
String , ID , Boolean |
… il valore è esattamente lo stesso del contenuto del campo |
EQUALS_NOT |
String , ID |
… il valore è not come il contenuto del campo |
CONTAINS |
String |
… il contenuto del campo contiene il valore ({ value: "mas", _op: CONTAINS } corrisponderà Christmas , Xmas , master , …) |
CONTAINS_NOT |
String |
… il contenuto del campo not contiene il valore |
STARTS_WITH |
ID |
… l’ID inizia con un certo valore ({ value: "/content/dam/", _op: STARTS_WITH corrisponderà /content/dam/path/to/fragment , ma non /namespace/content/dam/something |
EQUAL |
Int , Float |
… il valore è esattamente lo stesso del contenuto del campo |
UNEQUAL |
Int , Float |
… il valore è not come il contenuto del campo |
GREATER |
Int , Float |
… il contenuto del campo è maggiore del valore |
GREATER_EQUAL |
Int , Float |
… il contenuto del campo è maggiore o uguale al valore |
LOWER |
Int , Float |
… il contenuto del campo è inferiore al valore |
LOWER_EQUAL |
Int , Float |
… il contenuto del campo è inferiore o uguale al valore |
AT |
Calendar , Date , Time |
… il contenuto del campo è esattamente lo stesso del valore (inclusa l’impostazione del fuso orario) |
NOT_AT |
Calendar , Date , Time |
… il contenuto del campo è not uguale al valore |
BEFORE |
Calendar , Date , Time |
… il punto nel tempo indicato dal valore è prima del punto nel tempo indicato dal contenuto del campo |
AT_OR_BEFORE |
Calendar , Date , Time |
… il momento indicato dal valore è precedente o nello stesso momento indicato dal contenuto del campo |
AFTER |
Calendar , Date , Time |
… il punto nel tempo indicato dal valore è successivo al punto nel tempo indicato dal contenuto del campo |
AT_OR_AFTER |
Calendar , Date , Time |
… il momento indicato dal valore è successivo o nello stesso momento indicato dal contenuto del campo |
Alcuni tipi consentono inoltre di specificare opzioni aggiuntive che modificano la modalità di valutazione di un’espressione:
Opzione | Tipo/i | Descrizione |
---|---|---|
_ignoreCase |
String |
Ignora il caso di una stringa, ad esempio un valore di time corrisponderà TIME , time , tImE … |
_sensitiveness |
Float |
Consente un certo margine per float valori da considerare uguali (per aggirare i limiti tecnici dovuti alla rappresentazione interna di float valori; dovrebbe essere evitata, in quanto questa opzione potrebbe avere un impatto negativo sulle prestazioni |
Le espressioni possono essere combinate con un set tramite un operatore logico (_logOp
):
OR
- il set di espressioni avrà esito positivo se almeno un’espressione avrà esito positivoAND
- il set di espressioni avrà successo se tutte le espressioni avranno esito positivo (impostazione predefinita)Ogni campo può essere filtrato in base al proprio set di espressioni. I set di espressioni di tutti i campi menzionati nell’argomento del filtro verranno infine combinati dal proprio operatore logico.
Una definizione di filtro (passata come filter
argomento a una query) contiene:
lastName
nel filtro per lastName
nel campo Tipo di dati (campo)_expressions
array, fornendo il set di espressioni e _logOp
campo che definisce l’operatore logico con cui combinare le espressionivalue
e l'operatore (_operator
campo) il contenuto di un campo deve essere confrontato conÈ possibile omettere _logOp
per combinare gli elementi con AND
e _operator
se desideri verificare l’uguaglianza, in quanto questi sono i valori predefiniti.
L'esempio seguente illustra una query completa che filtra tutte le persone con una lastName
di Provo
o contenenti sjö
, indipendentemente dal caso:
{
authorList(filter: {
lastname: {
_logOp: OR
_expressions: [
{
value: "sjö",
_operator: CONTAINS,
_ignoreCase: true
},
{
value: "Provo"
}
]
}
}) {
items {
lastName
firstName
}
}
}
È anche possibile filtrare i campi nidificati, ma non è consigliabile, in quanto potrebbe causare problemi di prestazioni.
Per altri esempi, consulta:
informazioni dettagliate di GraphQL per estensioni AEM
Query di esempio che utilizzano il contenuto e la struttura di esempio
Questa funzione ti consente di ordinare i risultati della query in base a un campo specificato.
I criteri di ordinamento:
Esempio:
query {
authorList(sort: "lastName, firstName") {
items {
firstName
lastName
}
}
}
Inoltre:
{
authorList(sort: "lastName DESC, firstName DESC") {
items {
lastName
firstName
}
}
}
È inoltre possibile ordinare in base a un campo all’interno di un frammento nidificato utilizzando il formato nestedFragmentname.fieldname
.
Questo potrebbe avere un impatto negativo sulle prestazioni.
Esempio:
query {
articleList(sort: "authorFragment.lastName") {
items {
title
authorFragment {
firstName
lastName
birthDay
}
slug
}
}
}
Questa funzione consente di eseguire il paging sui tipi di query che restituiscono un elenco. Vengono forniti due metodi:
offset
e limit
in List
queryfirst
e after
in Paginated
queryIn una ...List
query utilizzabile offset
e limit
per restituire un sottoinsieme specifico di risultati:
offset
: Specifica il primo set di dati da restituirelimit
: Specifica il numero massimo di set di dati da restituireAd esempio, per trasmettere la pagina dei risultati contenenti fino a cinque articoli, a partire dal quinto articolo dal completato elenco dei risultati:
query {
articleList(offset: 5, limit: 5) {
items {
authorFragment {
lastName
firstName
}
}
}
}
Il paging richiede un ordinamento stabile per funzionare correttamente in più query che richiedono pagine diverse dello stesso set di risultati. Per impostazione predefinita, utilizza il percorso del repository di ogni elemento del set di risultati per assicurarsi che l'ordine sia sempre lo stesso. Se viene utilizzato un ordinamento diverso e se tale ordinamento non può essere eseguito a livello di query JCR, le prestazioni risulteranno negative, poiché l’intero set di risultati deve essere caricato in memoria prima di determinare le pagine.
Maggiore è l'offset, più tempo sarà necessario per saltare gli elementi dal set di risultati completo della query JCR. Una soluzione alternativa per i set di risultati di grandi dimensioni è quella di utilizzare la query impaginata con first
e after
metodo .
La ...Paginated
il tipo di query riutilizza la maggior parte dei ...List
funzionalità del tipo di query (filtro, ordinamento), ma non utilizzare offset
/limit
utilizza first
/after
argomenti definiti Specifica delle connessioni del cursore GraphQL. È possibile trovare un’introduzione meno formale nella Introduzione a GraphQL.
first
: La n
primi elementi da restituire.50
.100
.after
: Il cursore che determina l’inizio della pagina richiesta; notare che la voce rappresentata dal cursore non è inclusa nel set di risultati; il cursore di un elemento è determinato dalla cursor
campo edges
struttura.Ad esempio, restituisce la pagina dei risultati contenenti fino a cinque avventure, a partire dalla voce del cursore specificata nel completato elenco dei risultati:
query {
adventurePaginated(first: 5, after: "ODg1MmMyMmEtZTAzMy00MTNjLThiMzMtZGQyMzY5ZTNjN2M1") {
edges {
cursor
node {
title
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
Per impostazione predefinita, il paging utilizza l’UUID del nodo dell’archivio che rappresenta il frammento per ordinare in modo che l’ordine dei risultati sia sempre lo stesso. Quando sort
viene utilizzato, l’UUID viene utilizzato implicitamente per garantire un ordinamento univoco; anche per due elementi con chiavi di ordinamento identiche.
A causa di vincoli tecnici interni, le prestazioni peggioreranno se l’ordinamento e il filtro vengono applicati ai campi nidificati. Si consiglia pertanto di utilizzare i campi di filtro/ordinamento memorizzati a livello di radice. Questo è anche il modo consigliato per eseguire query su set di risultati impaginati di grandi dimensioni.
Le operazioni di base delle query con GraphQL per AEM sono conformi alle specifiche standard di GraphQL. Per le query GraphQL con AEM sono disponibili alcune estensioni:
Se prevedi un elenco di risultati:
List
al nome del modello; ad esempio, cityList
Potete effettuare le seguenti operazioni:
ASC
: crescenteDESC
: decrescenteRestituisce una pagina di risultati utilizzando:
Se necessiti di un singolo risultato:
Se prevedi un elenco di risultati:
List
al nome del modello; ad esempio, cityList
Se vuoi utilizzare un operatore OR logico:
_logOp: OR
Esiste anche l’operatore AND logico, ma è (spesso) implicito
Puoi eseguire query sui nomi dei campi corrispondenti ai campi all’interno del modello per frammenti di contenuto
Oltre ai campi del modello, sono disponibili alcuni campi generati dal sistema (preceduti dal carattere di sottolineatura):
Per il contenuto:
_locale
: per visualizzare la lingua; basato su Language Manager
_metadata
: per visualizzare i metadati del frammento
_model
: consente di eseguire query per un modello per frammenti di contenuto (percorso e titolo)
_path
: il percorso del frammento di contenuto all’interno dell’archivio
_reference
: per visualizzare riferimenti; inclusi riferimenti in linea nell’Editor testo RTF
_variation
: per visualizzare varianti specifiche all’interno del frammento di contenuto
Se per un frammento di contenuto non esiste la variante determinata, la variante principale verrà restituita come impostazione predefinita (fallback).
E operazioni:
_operator
: applica operatori specifici; EQUALS
, EQUALS_NOT
, GREATER_EQUAL
, LOWER
, CONTAINS
, STARTS_WITH
_apply
: applica condizioni specifiche; ad esempio, AT_LEAST_ONCE
_ignoreCase
: per ignorare il caso durante la query
I tipi di unione GraphQL sono supportati:
Fallback durante la query dei frammenti nidificati:
Per accedere all’endpoint di GraphQL da un sito web esterno è necessario configurare i seguenti elementi:
Vedi Autenticazione per query GraphQL AEM remote su frammenti di contenuto.
Domande poste:
D: “quali sono le differenze tra l’API di GraphQL per AEM e l’API di Query Builder?”
Cerchi un pratico tutorial? Dai un'occhiata al tutorial Guida introduttiva di headless AEM e GraphQL che illustra come creare ed esporre contenuti, utilizzati da un’app esterna, mediante le API GraphQL di AEM in uno scenario CMS headless.