Gestione degli host AEM
La distribuzione di un’applicazione AEM Headless richiede attenzione sul modo in cui gli URL dell’AEM vengono costruiti per garantire l’utilizzo corretto dell’host/dominio AEM. I tipi di URL/richiesta principali di cui tenere conto sono:
- Richieste HTTP a API GraphQL per AEM
- URL immagine per le risorse immagine a cui si fa riferimento nei frammenti di contenuto e consegnati da AEM
In genere, un’app AEM headless interagisce con un singolo servizio AEM sia per le richieste API che di immagini di GraphQL. Il servizio AEM cambia in base all’implementazione dell’app headless AEM:
Per gestire le permutazioni del tipo di distribuzione, ogni distribuzione di app viene creata utilizzando una configurazione che specifica il servizio AEM a cui connettersi. L’host/dominio del servizio AEM configurato viene quindi utilizzato per creare gli URL API e gli URL immagine di GraphQL dell’AEM. Per determinare l’approccio corretto per la gestione delle configurazioni dipendenti dalla build, fai riferimento alla documentazione del framework dell’app headless AEM (ad esempio, React, iOS, Android™ e così via), in quanto l’approccio varia in base al framework.
Di seguito sono riportati alcuni esempi di possibili approcci per la costruzione di URL per AEM GraphQL API e richieste di immagini, per diversi framework e piattaforme headless popolari.
Richieste API GraphQL per AEM
Le richieste HTTP GET dall'app headless alle API GraphQL dell'AEM devono essere configurate per interagire con il servizio AEM corretto, come descritto nella tabella precedente.
Quando si utilizzano SDK headless AEM (disponibili per JavaScript basato su browser, JavaScript basato su server e Java™), un host AEM può inizializzare l'oggetto client AEM headless con il servizio AEM con cui connettersi.
Quando sviluppi un client AEM headless personalizzato, assicurati che l’host del servizio AEM sia parametrizzabile in base ai parametri di build.
Esempi
Di seguito sono riportati alcuni esempi di come le richieste API GraphQL di AEM possono rendere configurabile il valore host AEM per vari framework di app headless.
Questo esempio, basato liberamente sull'app AEM Headless React, illustra come configurare le richieste API GraphQL dell'AEM per connettersi a diversi servizi AEM in base alle variabili di ambiente.
Le app React devono utilizzare il client headless AEM per JavaScript per interagire con le API GraphQL AEM. Il client AEM Headless fornito dal client AEM Headless per JavaScript deve essere inizializzato con l’host del servizio AEM a cui si connette.
File di ambiente React
React utilizza file di ambiente personalizzati, o .env
file, memorizzati nella directory principale del progetto per definire valori specifici della build. Ad esempio, il file .env.development
contiene i valori utilizzati per durante lo sviluppo, mentre .env.production
contiene i valori utilizzati per le build di produzione.
.env.development
code language-none |
---|
|
È possibile specificare .env
file per altri usi 🔗 tramite il postfix di .env
e un descrittore semantico, ad esempio .env.stage
o .env.production
. È possibile utilizzare file .env
diversi durante l'esecuzione o la creazione dell'app React impostando REACT_APP_ENV
prima di eseguire un comando npm
.
Ad esempio, package.json
di un'app React può contenere la seguente configurazione scripts
:
package.json
code language-none |
---|
|
Client AEM headless
Il client AEM headless per JavaScript contiene un client AEM headless che invia richieste HTTP alle API GraphQL dell'AEM. Il client headless AEM deve essere inizializzato con l'host AEM con cui interagisce, utilizzando il valore del file .env
attivo.
src/api/headlessClient.js
code language-none |
---|
|
React useEffect(…) gancio
Gli hook useEffect personalizzati di React chiamano il client headless AEM, inizializzato con l’host AEM, per conto del componente React che esegue il rendering della visualizzazione.
src/api/persistedQueries.js
code language-javascript |
---|
|
Componente React
L'hook useEffect personalizzato, useAdventureByPath
, viene importato e utilizzato per ottenere i dati tramite il client headless dell'AEM ed eseguire il rendering del contenuto per l'utente finale.
- 'src/components/AdventureDetail.js'
code language-javascript |
---|
|
Questo esempio, basato sull'esempio dell'app iOS™ headless AEM, illustra come configurare le richieste API di GraphQL AEM per connettersi a host AEM diversi in base a variabili di configurazione specifiche della build.
Le app iOS™ richiedono un client headless AEM personalizzato per interagire con le API GraphQL dell’AEM. Il client headless AEM deve essere scritto in modo che l’host del servizio AEM sia configurabile.
Configurazione della build
Il file di configurazione Xcode contiene i dettagli di configurazione predefiniti.
Config.xcconfig
code language-swift |
---|
|
Inizializzare il client headless AEM personalizzato
L'app iOS 🔗 dell'esempio AEM headless utilizza un client AEM headless personalizzato inizializzato con i valori di configurazione per AEM_SCHEME
e AEM_HOST
.
code language-swift |
---|
|
Il client AEM headless personalizzato (api/Aem.swift
) contiene un metodo makeRequest(..)
che aggiunge il prefisso delle richieste API GraphQL AEM all'AEM configurato scheme
e host
.
api/Aem.swift
code language-swift |
---|
|
È possibile creare nuovi file di configurazione della build per connettersi a diversi servizi AEM. I valori specifici della build per AEM_SCHEME
e AEM_HOST
vengono utilizzati in base alla build selezionata in XCode, determinando la connessione del client headless AEM personalizzato con il servizio AEM corretto.
Questo esempio, basato sull'esempio dell'app AEM Headless Android™, illustra come configurare le richieste API di GraphQL AEM per connettersi a diversi servizi AEM in base a variabili di configurazione specifiche della build (o versioni).
Le app Android™ (se scritte in Java™) devono utilizzare il client AEM headless per Java™ per interagire con le API GraphQL dell'AEM. Il client AEM headless, fornito dal client AEM headless per Java™, deve essere inizializzato con l’host del servizio AEM a cui si connette.
File di configurazione della build
Le app Android™ definiscono i "productFlavors" utilizzati per creare artefatti per usi diversi.
In questo esempio viene illustrato come definire due versioni di prodotto Android™, fornendo diversi valori host del servizio AEM (AEM_HOST
) per gli utilizzi di sviluppo (dev
) e produzione (prod
).
Nel file build.gradle
dell'app, viene creato un nuovo flavorDimension
denominato env
.
Nella dimensione env
sono definiti due productFlavors
: dev
e prod
. Ogni productFlavor
utilizza buildConfigField
per impostare variabili specifiche della build che definiscono il servizio AEM a cui connettersi.
app/build.gradle
code language-gradle |
---|
|
Caricatore Android™
Inizializza il generatore AEMHeadlessClient
, fornito dal client headless AEM per Java™ con il valore AEM_HOST
dal campo buildConfigField
.
app/src/main/java/com/adobe/wknd/androidapp/loader/AdventuresLoader.java
code language-java |
---|
|
Quando crei l'app Android™ per usi diversi, specifica il sapore env
e viene utilizzato il valore host AEM corrispondente.
URL immagine AEM
Le richieste di immagini dall'app headless all'AEM devono essere configurate per interagire con il servizio AEM corretto, come descritto nella tabella precedente.
Adobe consiglia di utilizzare immagini ottimizzate rese disponibili tramite il campo _dynamicUrl
nelle API GraphQL dell'AEM. Il campo _dynamicUrl
restituisce un URL senza host che può essere preceduto dall'host del servizio AEM utilizzato per eseguire query sulle API GraphQL dell'AEM. Il campo _dynamicUrl
nella risposta di GraphQL si presenta come:
{
...
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--dd42d814-88ec-4c4d-b5ef-e3dc4bc0cb42/example.jpg?preferwebp=true",
...
}
Esempi
Di seguito sono riportati alcuni esempi di come gli URL delle immagini possono anteporre il valore dell’host AEM in modo che sia configurabile per vari framework di app headless. Gli esempi presuppongono l'utilizzo di query GraphQL che restituiscono riferimenti immagine utilizzando il campo _dynamicUrl
.
Ad esempio:
Query persistente GraphQL
Questa query GraphQL restituisce un riferimento a un'immagine _dynamicUrl
. Come visto nella risposta GraphQL che esclude un host.
query ($path: String!) {
adventureByPath(_path: $path, _assetTransform: { format: JPG, preferWebp: true }) {
item {
title,
primaryImage {
... on ImageRef {
_dynamicUrl
}
}
}
}
}
Risposta GraphQL
Questa risposta di GraphQL restituisce il riferimento all'immagine _dynamicUrl
, che esclude un host.
{
"data": {
"adventureByPath": {
"item": {
"adventurePrimaryImage": {
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--de43411-88ec-4c4d-b5ef-e3dc4bc0cb42/adobestock-175749320.jpg?preferwebp=true",
}
}
}
}
}
Questo esempio, basato sull'app AEM Headless React, illustra come configurare gli URL delle immagini per la connessione ai servizi AEM corretti in base alle variabili di ambiente.
In questo esempio viene illustrato il prefisso del campo di riferimento immagine _dynamicUrl
, con una variabile di ambiente React configurabile REACT_APP_AEM_HOST
.
File di ambiente React
React utilizza file di ambiente personalizzati, o .env
file, memorizzati nella directory principale del progetto per definire valori specifici della build. Ad esempio, il file .env.development
contiene i valori utilizzati per durante lo sviluppo, mentre .env.production
contiene i valori utilizzati per le build di produzione.
.env.development
code language-none |
---|
|
È possibile specificare .env
file per altri usi 🔗 tramite il postfix di .env
e un descrittore semantico, ad esempio .env.stage
o .env.production
. È possibile utilizzare un file .env
diverso durante l'esecuzione o la creazione dell'app React impostando REACT_APP_ENV
prima di eseguire un comando npm
.
Ad esempio, package.json
di un'app React può contenere la seguente configurazione scripts
:
package.json
code language-none |
---|
|
Componente React
Il componente React importa la variabile di ambiente REACT_APP_AEM_HOST
e aggiunge il prefisso _dynamicUrl
all'immagine per fornire un URL immagine completamente risolvibile.
La stessa variabile di ambiente REACT_APP_AEM_HOST
viene utilizzata per inizializzare il client AEM headless utilizzato dall'hook useEffect personalizzato useAdventureByPath(..)
utilizzato per recuperare i dati GraphQL dall'AEM. Utilizzando la stessa variabile per creare la richiesta API GraphQL dell’URL dell’immagine, assicurati che l’app React interagisca con lo stesso servizio AEM per entrambi i casi d’uso.
- 'src/components/AdventureDetail.js'
code language-javascript |
---|
|
Questo esempio, basato sull'esempio dell'app AEM Headless iOS™, illustra come gli URL dell'immagine AEM possono essere configurati per connettersi a diversi host AEM in base a variabili di configurazione specifiche della build.
Configurazione della build
Il file di configurazione Xcode contiene i dettagli di configurazione predefiniti.
Config.xcconfig
code language-swift |
---|
|
Generatore URL immagine
In Aem.swift
, l'implementazione client headless AEM personalizzata, una funzione personalizzata imageUrl(..)
utilizza il percorso dell'immagine fornito nel campo _dynamicUrl
nella risposta GraphQL e lo precede con l'host AEM. Questa funzione viene quindi richiamata nelle visualizzazioni di iOS ogni volta che viene eseguito il rendering di un’immagine.
WKNDAdventures/AEM/Aem.swift
code language-swift |
---|
|
Vista iOS
La vista iOS e il prefisso del valore dell'immagine _dynamicUrl
forniscono un URL immagine completamente risolvibile.
WKNDAdventures/Views/AdventureListItemView.swift
code language-swift |
---|
|
È possibile creare nuovi file di configurazione della build per connettersi a diversi servizi AEM. I valori specifici della build per AEM_SCHEME
e AEM_HOST
vengono utilizzati in base alla build selezionata in XCode, in modo che il client headless AEM personalizzato interagisca con il servizio AEM corretto.
Questo esempio, basato sull'esempio dell'app AEM Headless Android™, illustra come gli URL dell'immagine AEM possono essere configurati per connettersi a diversi servizi AEM in base a variabili di configurazione specifiche della build (o versioni).
File di configurazione della build
Le app Android™ definiscono "productFlavors" che vengono utilizzati per creare artefatti per usi diversi.
In questo esempio viene illustrato come definire due versioni di prodotto Android™, fornendo diversi valori host del servizio AEM (AEM_HOST
) per gli utilizzi di sviluppo (dev
) e produzione (prod
).
Nel file build.gradle
dell'app, viene creato un nuovo flavorDimension
denominato env
.
Nella dimensione env
sono definiti due productFlavors
: dev
e prod
. Ogni productFlavor
utilizza buildConfigField
per impostare variabili specifiche della build che definiscono il servizio AEM a cui connettersi.
app/build.gradle
code language-gradle |
---|
|
Caricamento dell’immagine dell’AEM
Android™ utilizza ImageGetter
per recuperare e memorizzare nella cache locale i dati immagine dall'AEM. In prepareDrawableFor(..)
l'host del servizio AEM, definito nella configurazione di compilazione attiva, viene utilizzato per prefissare il percorso dell'immagine creando un URL risolvibile in AEM.
app/src/main/java/com/adobe/wknd/androidapp/loader/RemoteImagesCache.java
code language-java |
---|
|
Vista Android™
La visualizzazione Android™ ottiene i dati dell'immagine tramite RemoteImagesCache
utilizzando il valore _dynamicUrl
della risposta di GraphQL.
app/src/main/java/com/adobe/wknd/androidapp/AdventureDetailFragment.java
code language-java |
---|
|
Quando crei l'app Android™ per usi diversi, specifica il sapore env
e viene utilizzato il valore host AEM corrispondente.