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.