Hantera AEM
Distribuering av ett AEM Headless-program kräver uppmärksamhet i hur AEM URL:er skapas för att säkerställa att rätt AEM värd/domän används. Den primära URL/request-typen som ska vara medveten om är:
- HTTP-begäranden till AEM GraphQL API:er
- Bild-URL:er till bildresurser som refereras i innehållsfragment och levereras av AEM
Vanligtvis interagerar en AEM Headless-app med en enda AEM för både GraphQL API och bildbegäranden. AEM ändras baserat på den AEM Headless-appdistributionen:
För att hantera permutationer av distributionstyp skapas varje programdistribution med en konfiguration som anger vilken AEM som ska anslutas. Värden/domän för den konfigurerade AEM används sedan för att skapa URL:er för AEM GraphQL och Image URL:er. För att avgöra hur du hanterar byggberoende konfigurationer på rätt sätt, se AEM Headless-appens ramverk (till exempel React, iOS, Android™ och så vidare), eftersom arbetssättet varierar beroende på ramverket.
Nedan följer exempel på möjliga strategier för att skapa URL:er för AEM GraphQL API och image-begäranden för flera populära headless-ramverk och plattformar.
AEM GraphQL API-begäranden
HTTP-GET-begäranden från den headless-appen till AEM GraphQL API:er måste konfigureras för att interagera med rätt AEM, vilket beskrivs i tabellen ovan.
När du använder AEM Headless SDK:er (tillgängligt för webbläsarbaserade JavaScript, serverbaserade JavaScript och Java™) kan en AEM initiera det AEM Headless-klientobjektet med AEM Service att ansluta till.
När du utvecklar en anpassad AEM Headless-klient måste du se till att AEM är parameteriseringsbar baserat på build-parametrar.
Exempel
Nedan följer exempel på hur AEM GraphQL API-begäranden kan göra det AEM värdvärdet konfigurerbart för olika headless-appramverk.
Det här exemplet, som är löst baserat på appen AEM Headless React, visar hur AEM GraphQL API-begäranden kan konfigureras för att ansluta till olika AEM tjänster baserat på miljövariabler.
Reaktionsappar bör använda den AEM Headless Client för JavaScript för att interagera med AEM GraphQL API:er. Den AEM Headless-klienten som tillhandahålls av den AEM Headless-klienten för JavaScript måste initieras med den AEM Service-värd som den ansluter till.
Reagera på miljöfil
Reaktionen använder anpassade miljöfiler, eller .env
filer, som lagras i projektets rot för att definiera build-specifika värden. Filen .env.development
innehåller till exempel värden som används under utvecklingen, medan .env.production
innehåller värden som används för produktionsbyggen.
.env.development
code language-none |
---|
|
.env
filer för annan användning kan anges genom att .env
efterkorrigeras och en semantisk beskrivning, till exempel .env.stage
eller .env.production
. Olika .env
-filer kan användas när du kör eller skapar React-appen genom att ställa in REACT_APP_ENV
innan du kör ett npm
-kommando.
En React-apps package.json
kan till exempel innehålla följande scripts
-konfiguration:
package.json
code language-none |
---|
|
AEM utan huvud
AEM Headless Client för JavaScript innehåller en AEM Headless-klient som gör HTTP-begäranden till AEM GraphQL API:er. Den AEM Headless-klienten måste initieras med den AEM värd som den interagerar med, med hjälp av värdet från den aktiva .env
-filen.
src/api/headlessClient.js
code language-none |
---|
|
Reagera useEffect(…) krok
Anropar den AEM Headless-klienten, som initieras med AEM, för att återge vyn för React-komponenten.
src/api/persistedQueries.js
code language-javascript |
---|
|
Reaktionskomponent
Den anpassade useEffect-kroken, useAdventureByPath
, importeras och används för att hämta data med den AEM Headless-klienten och återge innehållet till slutanvändaren.
- src/components/AdventureDetail.js
code language-javascript |
---|
|
Det här exemplet, som baseras på exemplet AEM Headless iOS™-appen, visar hur AEM GraphQL API-begäranden kan konfigureras för att ansluta till olika AEM värdar baserat på build-specifika konfigurationsvariabler.
iOS™-appar kräver en anpassad AEM Headless-klient för att kunna interagera med AEM GraphQL API:er. Den AEM Headless-klienten måste skrivas så att AEM kan konfigureras.
Bygg konfiguration
XCode-konfigurationsfilen innehåller standardkonfigurationsinformationen.
Config.xcconfig
code language-swift |
---|
|
Initiera den anpassade AEM headless-klienten
I exemplet AEM Headless iOS-appenanvänds en anpassad AEM headless-klient som initierats med config-värdena för AEM_SCHEME
och AEM_HOST
.
code language-swift |
---|
|
Den anpassade AEM Headless-klienten (api/Aem.swift
) innehåller en metod makeRequest(..)
som prefix AEM GraphQL API:er med den konfigurerade AEM scheme
och host
.
api/Aem.swift
code language-swift |
---|
|
Det går att skapa nya byggkonfigurationsfiler för att ansluta till olika AEM. De build-specifika värdena för AEM_SCHEME
och AEM_HOST
används baserat på den valda versionen i XCode, vilket gör att den anpassade AEM Headless-klienten ansluter till rätt AEM.
I det här exemplet, som baseras på exemplet AEM Headless Android™-appen, visas hur AEM GraphQL API-begäranden kan konfigureras för att ansluta till olika AEM-tjänster baserat på build-specifika (eller arom) konfigurationsvariabler.
Android™-appar (när de skrivs i Java™) bör använda AEM Headless Client för Java™ för att interagera med AEM GraphQL API:er. Den AEM Headless-klienten som tillhandahålls av den AEM Headless-klienten för Java™ måste initieras med den AEM Service-värd som den ansluter till.
Bygg konfigurationsfil
Android™-appar definierar"productFlavors" som används för att skapa artefakter för olika användningsområden.
I det här exemplet visas hur två Android™-produktsmak kan definieras, vilket ger olika värden för AEM (AEM_HOST
) för utveckling (dev
) och produktion (prod
).
En ny flavorDimension
med namnet env
skapas i appens build.gradle
-fil.
I dimensionen env
definieras två productFlavors
: dev
och prod
. Varje productFlavor
använder buildConfigField
för att ange build-specifika variabler som definierar den AEM som ska anslutas.
app/build.gradle
code language-gradle |
---|
|
Android™ loader
Initiera AEMHeadlessClient
-byggaren som tillhandahålls av den AEM Headless Client för Java™ med värdet AEM_HOST
från fältet buildConfigField
.
app/src/main/java/com/adobe/wknd/androidapp/loader/AdventuresLoader.java
code language-java |
---|
|
När du skapar Android™-appen för olika användningsområden anger du varianten env
och motsvarande AEM värdvärde används.
AEM bildens URL:er
Avbildningsbegäranden från den headless-appen till AEM måste konfigureras för att interagera med rätt AEM, enligt beskrivningen i tabellen ovan.
Adobe rekommenderar att du använder optimerade bilder som är tillgängliga via fältet _dynamicUrl
i AEM GraphQL API:er. Fältet _dynamicUrl
returnerar en värdlös URL som kan föregås av AEM som används för att fråga AEM GraphQL API:er. Fältet _dynamicUrl
i GraphQL-svaret ser ut så här:
{
...
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--dd42d814-88ec-4c4d-b5ef-e3dc4bc0cb42/example.jpg?preferwebp=true",
...
}
Exempel
Nedan följer exempel på hur bild-URL:er kan prefix för AEM värdvärde som kan konfigureras för olika ramverk för headless-appar. Exemplen utgår från användningen av GraphQL-frågor som returnerar bildreferenser i fältet _dynamicUrl
.
Till exempel:
GraphQL beständig fråga
Den här GraphQL-frågan returnerar bildreferensens _dynamicUrl
. Som framgår i GraphQL-svaret som exkluderar en värd.
query ($path: String!) {
adventureByPath(_path: $path, _assetTransform: { format: JPG, preferWebp: true }) {
item {
title,
primaryImage {
... on ImageRef {
_dynamicUrl
}
}
}
}
}
GraphQL svar
Det här GraphQL-svaret returnerar bildreferensens _dynamicUrl
, vilket utesluter en värd.
{
"data": {
"adventureByPath": {
"item": {
"adventurePrimaryImage": {
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--de43411-88ec-4c4d-b5ef-e3dc4bc0cb42/adobestock-175749320.jpg?preferwebp=true",
}
}
}
}
}
Det här exemplet, som baseras på exemplet AEM programmet Headless React, visar hur bild-URL:er kan konfigureras för att ansluta till rätt AEM Services baserat på miljövariabler.
I det här exemplet visas hur du prefix i bildreferensfältet _dynamicUrl
med en konfigurerbar REACT_APP_AEM_HOST
-miljövariabel.
Reagera på miljöfil
Reaktionen använder anpassade miljöfiler, eller .env
filer, som lagras i projektets rot för att definiera build-specifika värden. Filen .env.development
innehåller till exempel värden som används under utvecklingen, medan .env.production
innehåller värden som används för produktionsbyggen.
.env.development
code language-none |
---|
|
.env
filer för annan användning kan anges genom att .env
efterkorrigeras och en semantisk beskrivning, till exempel .env.stage
eller .env.production
. Olika .env
-filer kan användas när du kör eller skapar React-appen genom att ställa in REACT_APP_ENV
innan du kör ett npm
-kommando.
En React-apps package.json
kan till exempel innehålla följande scripts
-konfiguration:
package.json
code language-none |
---|
|
Reaktionskomponent
Komponenten React importerar miljövariabeln REACT_APP_AEM_HOST
och prefixerar värdet för bilden _dynamicUrl
för att ge en fullt matchningsbar bild-URL.
Samma REACT_APP_AEM_HOST
-miljövariabel används för att initiera den AEM Headless-klienten som används av den anpassade useEffect-kroken som används för att hämta GraphQL-data från AEM. useAdventureByPath(..)
Om du använder samma variabel för att konstruera GraphQL API-begäran som bild-URL:en måste du se till att React-appen interagerar med samma AEM för båda användningsfallen.
- src/components/AdventureDetail.js
code language-javascript |
---|
|
Det här exemplet, som baseras på exemplet AEM Headless iOS™-appen, visar hur URL:er för AEM kan konfigureras för att ansluta till olika AEM baserade på build-specifika konfigurationsvariabler.
Bygg konfiguration
XCode-konfigurationsfilen innehåller standardkonfigurationsinformationen.
Config.xcconfig
code language-swift |
---|
|
URL-generator för bild
I Aem.swift
, den anpassade AEM headless-klientimplementeringen, tar en anpassad funktion imageUrl(..)
bildsökvägen som anges i fältet _dynamicUrl
i GraphQL-svaret och lägger till den som AEM värd. Den här funktionen anropas sedan i iOS-vyerna när en bild återges.
WKNDAdventures/AEM/Aem.swift
code language-swift |
---|
|
iOS view
IOS-vyn och prefixerar bildvärdet _dynamicUrl
för att ge en fullt matchningsbar bild-URL.
WKNDAdventures/Views/AdventureListItemView.swift
code language-swift |
---|
|
Det går att skapa nya byggkonfigurationsfiler för att ansluta till olika AEM. De build-specifika värdena för AEM_SCHEME
och AEM_HOST
används baserat på den valda versionen i XCode, vilket gör att den anpassade AEM Headless-klienten interagerar med rätt AEM.
I det här exemplet, som baseras på exemplet AEM Headless Android™-appen, visas hur URL:er för AEM kan konfigureras för att ansluta till olika AEM tjänster baserat på build-specifika (eller arom) konfigurationsvariabler.
Bygg konfigurationsfil
Android™-appar definierar"productFlavors" som används för att skapa artefakter för olika användningsområden.
I det här exemplet visas hur två Android™-produktsmak kan definieras, vilket ger olika värden för AEM (AEM_HOST
) för utveckling (dev
) och produktion (prod
).
En ny flavorDimension
med namnet env
skapas i appens build.gradle
-fil.
I dimensionen env
definieras två productFlavors
: dev
och prod
. Varje productFlavor
använder buildConfigField
för att ange build-specifika variabler som definierar den AEM som ska anslutas.
app/build.gradle
code language-gradle |
---|
|
Läsa in AEM
Android™ använder en ImageGetter
för att hämta och lokalt cachelagra bilddata från AEM. I prepareDrawableFor(..)
används AEM tjänstvärd, som definieras i den aktiva build-konfigurationen, som prefix till bildsökvägen för att skapa en matchningsbar URL till AEM.
app/src/main/java/com/adobe/wknd/androidapp/loader/RemoteImagesCache.java
code language-java |
---|
|
Android™-vy
I vyn Android™ hämtas bilddata via RemoteImagesCache
med hjälp av värdet _dynamicUrl
från GraphQL-svaret.
app/src/main/java/com/adobe/wknd/androidapp/AdventureDetailFragment.java
code language-java |
---|
|
När du skapar Android™-appen för olika användningsområden anger du varianten env
och motsvarande AEM värdvärde används.