AEM hosts beheren
Bij het implementeren van een AEM toepassing zonder kop moet u nagaan hoe AEM URL's zijn samengesteld om ervoor te zorgen dat de juiste AEM host/domein wordt gebruikt. De primaire URL/aanvraagtypen zijn:
- De verzoeken van HTTP aan AEM GraphQL APIs
- Beeld URLs aan beeldactiva die in de Fragmenten van de Inhoud van verwijzingen worden voorzien, en door AEM geleverd
Een AEM Headless-app communiceert doorgaans met één AEM voor zowel GraphQL API- als afbeeldingsaanvragen. De AEM-service verandert op basis van de implementatie van de AEM Headless-app:
Om plaatsingstype permutaties te behandelen, wordt elke app plaatsing gebouwd gebruikend een configuratie die de AEM te verbinden dienst specificeert. De host/het domein van de geconfigureerde AEM service wordt vervolgens gebruikt om de AEM GraphQL API-URL's en afbeeldings-URL's samen te stellen. Als u de juiste benadering voor het beheer van build-afhankelijke configuraties wilt bepalen, raadpleegt u de documentatie van de AEM Headless-app (bijvoorbeeld React, iOS, Android™, enzovoort), aangezien de aanpak per framework verschilt.
Het volgende is voorbeelden van mogelijke benaderingen om URLs voor te construeren AEM GraphQL APIen beeldverzoeken, voor verscheidene populaire koploze kaders en platforms.
GraphQL API-aanvragen AEM
De verzoeken van de GET van HTTP van headless app aan AEM GraphQL APIs moeten worden gevormd om met de correcte AEM dienst in wisselwerking te staan, zoals die in de lijst hierbovenwordt beschreven.
Wanneer het gebruiken van AEM Koploze SDKs(beschikbaar voor op browser-gebaseerde JavaScript, op server-gebaseerde JavaScript, en Java™), kan een AEM gastheer het AEM Hoofdloze cliëntvoorwerp met de AEMDienst initialiseren om met te verbinden.
Wanneer het ontwikkelen van een douane AEM de Draadloze cliënt, zorg ervoor de gastheer van de AEM dienst parameterize-able op bouwstijlparameters wordt gebaseerd.
Voorbeelden
Hieronder volgen voorbeelden van hoe AEM GraphQL API-aanvragen de AEM hostwaarde kunnen hebben die configureerbaar is voor verschillende raamwerken voor toepassingen zonder kop.
Dit voorbeeld, los gebaseerd op AEM Headless React app, illustreert hoe AEM de verzoeken van GraphQL API kunnen worden gevormd om met verschillende AEM Diensten te verbinden die op milieuvariabelen worden gebaseerd.
Reageer apps zou de Zwaarloze Cliënt van de Zwaartepunt voor JavaScriptmoeten gebruiken om met AEM te communiceren GraphQL APIs. De AEM Headless-client, die wordt geleverd door de AEM Headless Client voor JavaScript, moet worden geïnitialiseerd met de AEM Service-host waarmee deze verbinding maakt.
Omgevingsbestand Reageren
Reageer gebruik dossiers van het douanemilieu, of .env
dossiers, die in de wortel van het project worden opgeslagen om bouwstijl-specifieke waarden te bepalen. Het bestand .env.development
bevat bijvoorbeeld waarden die worden gebruikt tijdens de ontwikkeling, terwijl .env.production
waarden bevat die worden gebruikt voor productiebuilds.
.env.development
code language-none |
---|
|
.env
dossiers voor ander gebruik kunnen worden gespecificeerddoor .env
en een semantische beschrijver, zoals .env.stage
of .env.production
postfixeren. Verschillende .env
-bestanden kunnen worden gebruikt wanneer de React-app wordt uitgevoerd of gemaakt, door de REACT_APP_ENV
in te stellen voordat een npm
-opdracht wordt uitgevoerd.
Een React-app package.json
kan bijvoorbeeld de volgende scripts
config bevatten:
package.json
code language-none |
---|
|
AEM headless-client
De AEM Zwaarloze Cliënt voor JavaScriptbevat een AEM Zwaardeloze cliënt die HTTP- verzoeken aan AEM van GraphQL APIs doet. De AEM Headless-client moet worden geïnitialiseerd met de AEM host waarmee deze communiceert, met behulp van de waarde van het actieve .env
-bestand.
src/api/headlessClient.js
code language-none |
---|
|
UseEffect(…) Reageren haak
De haken van het gebruiksEffect van de Reactie van de douane roepen de Zwaardeloze cliënt van de AEM, die met de AEM gastheer, namens de component van de Reactie wordt geïnitialiseerd die de mening teruggeeft.
src/api/persistedQueries.js
code language-javascript |
---|
|
Reageercomponent
De aangepaste useEffect-haak useAdventureByPath
wordt geïmporteerd en gebruikt om de gegevens op te halen met de AEM Headless-client en de inhoud uiteindelijk te renderen naar de eindgebruiker.
- 'src/components/AdventureDetail.js'
code language-javascript |
---|
|
Dit voorbeeld, dat op het voorbeeld wordt gebaseerd AEM Headless iOS™ app, illustreert hoe AEM de verzoeken van GraphQL API kunnen worden gevormd om met verschillende AEM te verbinden die gastheren op worden gebaseerd bouwt-specifieke configuratievariabelen.
Voor iOS™-toepassingen is een aangepaste AEM Headless-client vereist voor interactie met AEM GraphQL API's. De cliënt van de Zwaartepunt van de AEM moet worden geschreven zodat de AEM de dienstgastheer configureerbaar is.
Configuratie samenstellen
Het XCode-configuratiebestand bevat de standaardconfiguratiegegevens.
Config.xcconfig
code language-swift |
---|
|
De aangepaste AEM zonder kop initialiseren
Het voorbeeld AEM Headless iOS appgebruikt een douane AEM zonder kop cliënt die met de configuratiewaarden voor AEM_SCHEME
en AEM_HOST
wordt geïnitialiseerd.
code language-swift |
---|
|
De aangepaste AEM headless-client (api/Aem.swift
) bevat een methode makeRequest(..)
die AEM GraphQL APIs-aanvragen voorstelt met de geconfigureerde AEM scheme
en host
.
api/Aem.swift
code language-swift |
---|
|
de Nieuwe dossiers van de bouwstijlconfiguratie kunnenworden gecreeerd om met de verschillende AEM diensten te verbinden. De build-specifieke waarden voor de AEM_SCHEME
en AEM_HOST
worden gebruikt op basis van de geselecteerde build in XCode, wat resulteert in de aangepaste AEM Headless-client voor verbinding met de juiste AEM.
Dit voorbeeld, dat op het voorbeeld wordt gebaseerd AEM Headless Android™ app, illustreert hoe AEM de verzoeken van GraphQL API kunnen worden gevormd om met verschillende AEMDiensten te verbinden die op bouwstijlspecifieke (of vlotters) configuratievariabelen worden gebaseerd.
Android™ apps (wanneer geschreven in Java™) zou de Zwaarloze Cliënt van de Zwaartepunt voor Java™moeten gebruiken om met AEM GraphQL APIs in wisselwerking te staan. De AEM Headless-client, die wordt geleverd door de AEM Headless Client voor Java™, moet worden geïnitialiseerd met de AEM Service-host waarmee deze verbinding maakt.
Configuratiebestand samenstellen
Android™-apps definiëren "productFlavors" die worden gebruikt om artefacten te maken voor verschillende toepassingen.
Dit voorbeeld toont hoe twee Android™ productaroma's kunnen worden bepaald, die verschillende AEM dienstgastheren (AEM_HOST
) waarden voor ontwikkeling (dev
) verstrekken en productie (prod
) gebruik.
In het build.gradle
-bestand van de app wordt een nieuwe flavorDimension
genaamd env
gemaakt.
In de env
-dimensie zijn twee productFlavors
gedefinieerd: dev
en prod
. Elke productFlavor
gebruikt buildConfigField
om bouwstijlspecifieke variabelen te plaatsen die de AEM dienst bepalen om met te verbinden.
app/build.gradle
code language-gradle |
---|
|
Android™ loader
Initialiseer de AEMHeadlessClient
builder, die wordt geleverd door de AEM Headless Client voor Java™, met de AEM_HOST
-waarde van het veld buildConfigField
.
app/src/main/java/com/adobe/wknd/androidapp/loader/AdventuresLoader.java
code language-java |
---|
|
Wanneer u de Android™-app voor verschillende toepassingen maakt, geeft u de env
-smaak op en wordt de bijbehorende AEM hostwaarde gebruikt.
URL's AEM
De beeldverzoeken van headless app aan AEM moeten worden gevormd om met de correcte AEM dienst in wisselwerking te staan, zoals die in hierboven lijstwordt beschreven.
De Adobe adviseert het gebruiken van geoptimaliseerde beeldenbeschikbaar gemaakt door het _dynamicUrl
gebied in het AEM van GraphQL APIs. Het veld _dynamicUrl
retourneert een URL zonder host die kan worden voorafgegaan door de host van de AEM die wordt gebruikt voor query AEM GraphQL API's. Het veld _dynamicUrl
in het GraphQL-antwoord ziet er als volgt uit:
{
...
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--dd42d814-88ec-4c4d-b5ef-e3dc4bc0cb42/example.jpg?preferwebp=true",
...
}
Voorbeelden
Hieronder ziet u voorbeelden van hoe afbeeldings-URL's de waarde van de AEM host kunnen voorvoegsel die voor verschillende raamwerken zonder kop kan worden geconfigureerd. In de voorbeelden wordt ervan uitgegaan dat GraphQL-query's worden gebruikt die afbeeldingsreferenties retourneren met het veld _dynamicUrl
.
Bijvoorbeeld:
GraphQL-query voortgezet
Deze GraphQL-query retourneert de _dynamicUrl
van een afbeeldingsverwijzing. Zoals gezien in de reactie van GraphQLdie een gastheer uitsluit.
query ($path: String!) {
adventureByPath(_path: $path, _assetTransform: { format: JPG, preferWebp: true }) {
item {
title,
primaryImage {
... on ImageRef {
_dynamicUrl
}
}
}
}
}
GraphQL-reactie
Deze GraphQL-reactie retourneert de verwijzing naar de afbeelding _dynamicUrl
, die een host uitsluit.
{
"data": {
"adventureByPath": {
"item": {
"adventurePrimaryImage": {
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--de43411-88ec-4c4d-b5ef-e3dc4bc0cb42/adobestock-175749320.jpg?preferwebp=true",
}
}
}
}
}
Dit voorbeeld, dat op het voorbeeld wordt gebaseerd AEM Headless React app, illustreert hoe beeld URLs kan worden gevormd om met de correcte AEMDiensten te verbinden die op milieuvariabelen worden gebaseerd.
In dit voorbeeld wordt getoond hoe voorvoegsel voor het afbeeldingsverwijzingsveld _dynamicUrl
wordt weergegeven met een configureerbare REACT_APP_AEM_HOST
Omgevingsvariabele React.
Omgevingsbestand Reageren
Reageer gebruik dossiers van het douanemilieu, of .env
dossiers, die in de wortel van het project worden opgeslagen om bouwstijl-specifieke waarden te bepalen. Het bestand .env.development
bevat bijvoorbeeld waarden die worden gebruikt tijdens de ontwikkeling, terwijl .env.production
waarden bevat die worden gebruikt voor productiebuilds.
.env.development
code language-none |
---|
|
.env
dossiers voor ander gebruik kunnen worden gespecificeerddoor .env
en een semantische beschrijver, zoals .env.stage
of .env.production
postfixeren. Er kan een ander .env
-bestand worden gebruikt wanneer de React-app wordt uitgevoerd of gemaakt, door de REACT_APP_ENV
in te stellen voordat een npm
-opdracht wordt uitgevoerd.
Een React-app package.json
kan bijvoorbeeld de volgende scripts
config bevatten:
package.json
code language-none |
---|
|
Reageercomponent
De component React importeert de omgevingsvariabele REACT_APP_AEM_HOST
en corrigeert de afbeeldings _dynamicUrl
-waarde om een volledig oplosbare afbeeldings-URL te verkrijgen.
Deze zelfde REACT_APP_AEM_HOST
omgevingsvariabele wordt gebruikt om de cliënt te initialiseren AEM Headless die door useAdventureByPath(..)
wordt gebruikt de haken van het douaneuseEffect die wordt gebruikt om de gegevens van GraphQL van AEM te halen. Wanneer u dezelfde variabele gebruikt om de GraphQL API-aanvraag samen te stellen als de afbeeldings-URL, moet u ervoor zorgen dat de React-app voor beide gebruiksgevallen interageert met dezelfde AEM.
- 'src/components/AdventureDetail.js'
code language-javascript |
---|
|
Dit voorbeeld, dat op het voorbeeld wordt gebaseerd AEM Headless iOS™ app, illustreert hoe AEM beeld URLs kan worden gevormd om met verschillende AEM gastheren te verbinden die op worden gebaseerd bouwt-specifieke configuratievariabelen.
Configuratie samenstellen
Het XCode-configuratiebestand bevat de standaardconfiguratiegegevens.
Config.xcconfig
code language-swift |
---|
|
URL-generator voor afbeelding
In Aem.swift
gebruikt een aangepaste AEM headless-clientimplementatie het afbeeldingspad zoals opgegeven in het veld _dynamicUrl
in de GraphQL-reactie en voegt deze aan de AEM toe. imageUrl(..)
Deze functie wordt vervolgens aangeroepen in de iOS-weergaven wanneer een afbeelding wordt gerenderd.
WKNDAdventures/AEM/Aem.swift
code language-swift |
---|
|
iOS-weergave
In de iOS-weergave en de voorvoegsel van de afbeeldings _dynamicUrl
-waarde wordt een volledig oplosbare afbeeldings-URL weergegeven.
WKNDAdventures/Views/AdventureListItemView.swift
code language-swift |
---|
|
de Nieuwe dossiers van de bouwstijlconfiguratie kunnenworden gecreeerd om met de verschillende AEM diensten te verbinden. De build-specifieke waarden voor de AEM_SCHEME
en AEM_HOST
worden gebruikt op basis van de geselecteerde build in XCode, wat resulteert in de aangepaste AEM Headless-client voor interactie met de juiste AEM.
Dit voorbeeld, dat op het voorbeeld wordt gebaseerd AEM Headless Android™ app, illustreert hoe AEM beeld URLs kan worden gevormd om met verschillende AEMDiensten te verbinden die op bouwstijlspecifieke (of vlotters) configuratievariabelen worden gebaseerd.
Configuratiebestand samenstellen
Android™-apps definiëren "productFlavors" die worden gebruikt om artefacten voor verschillende toepassingen te maken.
Dit voorbeeld toont hoe twee Android™ productaroma's kunnen worden bepaald, die verschillende AEM dienstgastheren (AEM_HOST
) waarden voor ontwikkeling (dev
) verstrekken en productie (prod
) gebruik.
In het build.gradle
-bestand van de app wordt een nieuwe flavorDimension
genaamd env
gemaakt.
In de env
-dimensie zijn twee productFlavors
gedefinieerd: dev
en prod
. Elke productFlavor
gebruikt buildConfigField
om bouwstijlspecifieke variabelen te plaatsen die de AEM dienst bepalen om met te verbinden.
app/build.gradle
code language-gradle |
---|
|
De AEM-afbeelding laden
De Android™ gebruikt een ImageGetter
om afbeeldingsgegevens van AEM op te halen en lokaal in de cache op te slaan. In prepareDrawableFor(..)
wordt de AEM servicehost, die in de actieve build-config is gedefinieerd, gebruikt om een voorvoegsel van het afbeeldingspad te maken dat een oplosbare URL voor AEM maakt.
app/src/main/java/com/adobe/wknd/androidapp/loader/RemoteImagesCache.java
code language-java |
---|
|
Android™-weergave
In de Android™-weergave worden de afbeeldingsgegevens opgehaald via de RemoteImagesCache
met behulp van de _dynamicUrl
-waarde uit het GraphQL-antwoord.
app/src/main/java/com/adobe/wknd/androidapp/AdventureDetailFragment.java
code language-java |
---|
|
Wanneer u de Android™-app voor verschillende toepassingen maakt, geeft u de env
-smaak op en wordt de bijbehorende AEM hostwaarde gebruikt.