Hantera AEM-värdar
Distribuering av ett AEM Headless-program kräver att du är uppmärksam på hur AEM URL:er konstrueras 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-tjänst för både GraphQL API och bildförfrågningar. AEM-tjänsten ändras baserat på driftsättningen av appen AEM Headless:
För att hantera permutationer av distributionstyp skapas varje programdistribution med en konfiguration som anger vilken AEM-tjänst som ska anslutas. Den konfigurerade AEM-tjänstens värd/domän används sedan för att skapa AEM GraphQL API:er och Image URL:er. Om du vill se hur du hanterar byggberoende konfigurationer på rätt sätt kan du läsa dokumentationen för appen AEM Headless (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 bildbegäranden för flera populära headless-ramverk och plattformar.
AEM GraphQL API-förfrågningar
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-tjänst, enligt beskrivningen 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-värd initiera AEM Headless-klientobjektet med AEM-tjänsten som du vill ansluta till.
När du utvecklar en anpassad AEM Headless-klient måste du se till att AEM-tjänstens värd kan parametriseras baserat på build-parametrar.
Exempel
Nedan följer exempel på hur AEM GraphQL API-begäranden kan göra AEM-värdvärdet konfigurerbart för olika headless-appramverk.
Det här exemplet, som är löst baserat på AEM Headless React-appen, 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 AEM Headless Client för JavaScript för att interagera med AEM GraphQL API:er. Klienten AEM Headless, som tillhandahålls av AEM Headless Client för JavaScript, måste initieras med den AEM Service Host 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 headless Client
AEM Headless-klienten för JavaScript innehåller en AEM Headless-klient som gör HTTP-begäranden till AEM GraphQL API:er. Klienten AEM Headless 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
Anrop av funktionen Custom React useEffect anropar klienten AEM Headless, som initieras med AEM-värden, för att återge vyn för komponenten React.
src/api/persistedQueries.js
code language-javascript |
---|
|
Reaktionskomponent
Den anpassade useEffect-kroken useAdventureByPath
importeras och används för att hämta data med 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 med 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. AEM Headless-klienten måste skrivas så att AEM tjänstvärd kan konfigureras.
Bygg konfiguration
XCode-konfigurationsfilen innehåller standardkonfigurationsinformationen.
Config.xcconfig
code language-swift |
---|
|
Initiera den anpassade AEM headless-klienten
I exempelappen AEM Headless iOS används en anpassad AEM Headless-klient som initierats med konfigurationsvärdena för AEM_SCHEME
och AEM_HOST
.
code language-swift |
---|
|
Den anpassade huvudlösa AEM-klienten (api/Aem.swift
) innehåller metoden makeRequest(..)
som prefixerar 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-tjänster. 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 kan ansluta till rätt AEM-tjänst.
I det här exemplet, som baseras på exemplet med 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 (skrivna i Java™) bör använda AEM Headless Client för Java™ för att interagera med AEM GraphQL API:er. Klienten AEM Headless, som tillhandahålls av AEM Headless Client för Java™, måste initieras med den AEM Service Host 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 AEM-tjänstvärdar (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 byggspecifika variabler som definierar den AEM-tjänst som ska anslutas till.
app/build.gradle
code language-gradle |
---|
|
Android™ loader
Initiera AEMHeadlessClient
-byggaren som tillhandahålls av 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 värdvärde för AEM används.
AEM bild-URL:er
Avbildningsbegäranden från den Headless-appen till AEM måste konfigureras för att interagera med rätt AEM-tjänst, 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 den AEM-tjänstvärd 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å exempelappen AEM 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-klient som används av useAdventureByPath(..)
anpassad useEffect-krok som används för att hämta GraphQL-data från AEM. 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-tjänst för båda användningsområdena.
- src/components/AdventureDetail.js
code language-javascript |
---|
|
Det här exemplet, som baseras på exemplet med AEM Headless iOS™-appen, visar hur AEM image-URL:er kan konfigureras för att ansluta till olika AEM-värdar baserat 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 i AEM-värden. 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-tjänster. 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-tjänst.
I det här exemplet, som baseras på exemplet med AEM Headless Android™-appen, visas hur AEM bild-URL:er 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 AEM-tjänstvärdar (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 byggspecifika variabler som definierar den AEM-tjänst som ska anslutas till.
app/build.gradle
code language-gradle |
---|
|
Läsa in AEM-bilden
Android™ använder en ImageGetter
för att hämta och lokalt cachelagra bilddata från AEM. I prepareDrawableFor(..)
används AEM-tjänstvärden, 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 värdvärde för AEM används.