API AEM
Le API di AEM forniscono astrazioni e funzionalità specifiche per i casi d’uso prodotti.
Le API PageManager e Page di AEM, ad esempio, forniscono astrazioni per cq:Page
nodi in AEM che rappresentano pagine Web.
Anche se questi nodi sono disponibili tramite API Sling come risorse e API JCR come nodi, le API di AEM forniscono astrazioni per i casi d'uso comuni. L’utilizzo delle API di AEM garantisce un comportamento coerente tra AEM e le personalizzazioni ed estensioni di AEM.
com.adobe.* rispetto a com.day.* API
Le API di AEM hanno una preferenza intra-package, identificata dai seguenti pacchetti Java™, in ordine di preferenza:
com.adobe.cq
com.adobe.granite
com.day.cq
Il pacchetto com.adobe.cq
supporta casi di utilizzo di prodotti, mentre com.adobe.granite
supporta casi di utilizzo di piattaforme tra più prodotti, ad esempio flussi di lavoro o attività (utilizzate tra i prodotti: AEM Assets, Sites e così via).
Il pacchetto com.day.cq
contiene API "originali". Queste API rispondono alle astrazioni e alle funzionalità di base che esistevano prima e/o intorno all'acquisizione di Day CQ da parte di Adobe. Queste API sono supportate e devono essere evitate, a meno che com.adobe.cq
o com.adobe.granite
pacchetti NON forniscano un'alternativa (più recente).
Le nuove astrazioni, ad esempio Content Fragments e Experience Fragments, vengono create nello spazio com.adobe.cq
anziché com.day.cq
come descritto di seguito.
API di query
AEM supporta più linguaggi di query. Le tre lingue principali sono JCR-SQL2, XPath e AEM Query Builder.
La preoccupazione più importante è mantenere un linguaggio di query coerente in tutta la base di codice, per ridurre la complessità e i costi di comprensione.
Tutti i linguaggi di query hanno effettivamente gli stessi profili di prestazioni, in quanto Apache Oak li trasferisce a JCR-SQL2 per l'esecuzione finale della query e il tempo di conversione a JCR-SQL2 è trascurabile rispetto al tempo di query stesso.
L'API preferita è AEM Query Builder, che rappresenta l'astrazione di livello più alto e fornisce un'API solida per la costruzione, l'esecuzione e il recupero dei risultati per le query, nonché le seguenti informazioni:
-
Costruzione di query con parametri semplice (parametri di query modellati come una mappa)
-
Predicati AEM che supportano i requisiti di query comuni
-
API estensibile, che consente lo sviluppo di predicati di query personalizzati
-
JCR-SQL2 e XPath possono essere eseguiti direttamente tramite Sling e API JCR, restituendo risultati rispettivamente come Sling Risorse o Nodi JCR.
Sling API
Apache Sling è il framework web RESTful su cui si basa AEM. Sling fornisce il routing delle richieste HTTP, modella i nodi JCR come risorse, fornisce il contesto di sicurezza e molto altro.
Sling API hanno il vantaggio aggiunto di essere create per l'estensione, il che significa che è spesso più facile e sicuro migliorare il comportamento delle applicazioni create utilizzando Sling API rispetto alle API JCR meno estensibili.
Utilizzi comuni delle API Sling
-
Accesso ai nodi JCR come Sling Resources e ai relativi dati tramite ValueMaps.
-
Fornire contesto di sicurezza tramite ResourceResolver.
-
Creazione e rimozione di risorse tramite i metodi di creazione/spostamento/copia/eliminazione di ResourceResolver.
-
Aggiornamento delle proprietà tramite ModifiableValueMap.
-
Elaborazione di blocchi predefiniti di richiesta
-
Elaborazione asincrona dei blocchi predefiniti
API JCR
Le API JCR (Java™ Content Repository) 2.0 fanno parte di una specifica per le implementazioni JCR (nel caso di AEM, Apache Jackrabbit Oak). Tutta l’implementazione JCR deve essere conforme a e implementare queste API, e pertanto rappresenta l’API di livello più basso per interagire con i contenuti di AEM.
Il JCR stesso è un archivio dati NoSQL gerarchico/ad albero utilizzato da AEM come archivio dei contenuti. JCR dispone di una vasta gamma di API supportate, che vanno dal contenuto CRUD all’esecuzione di query sui contenuti. Nonostante questa robusta API, è raro che siano preferite rispetto alle astrazioni di livello superiore di AEM e Sling.
Preferisci sempre le API JCR rispetto alle API Apache Jackrabbit Oak. Le API JCR sono per interagire con un archivio JCR, mentre le API Oak sono per implementare un archivio JCR.