Gérer les hôtes AEM
Lorsque vous déployez une application AEM Headless, prêtez attention à la construction des URL AEM afin de vous assurer que vous utilisez l’hôte ou le domaine AEM adapté. Les principaux types d’URL et de requêtes à connaître sont les suivants :
- Requêtes HTTP aux API GraphQL d’AEM
- URL d’image : pour les ressources d’image référencées dans les fragments de contenu et diffusées par AEM
En règle générale, une application AEM Headless interagit avec un seul service AEM pour les requêtes d’image et d’API GraphQL. Le service AEM change en fonction du déploiement de l’application AEM Headless :
Pour gérer les permutations de type déploiement, chaque déploiement d’application est créé à l’aide d’une configuration spécifiant le service AEM auquel se connecter. L’hôte ou le domaine du service AEM configuré est ensuite utilisé pour créer les URL de l’API GraphQL d’AEM et les URL d’image. Pour déterminer l’approche appropriée pour la gestion des configurations qui dépendent de la création, reportez-vous à la documentation du framework de l’application AEM Headless (par exemple, React, iOS, Android™, etc.), car l’approche varie selon le framework.
Vous trouverez ci-dessous des exemples d’approches possibles pour la création d’URL pour l’API GraphQL d’AEM et les requêtes d’images, pour plusieurs plateformes et frameworks découplés populaires.
Requêtes à l’API GraphQL d’AEM
Les requêtes HTTP GET de l’application découplée à l’API GraphQL d’AEM doivent être configurées pour interagir avec le service AEM adapté, comme décrit dans le tableau ci-dessus.
Lors de l’utilisation des SDK d’AEM Headless (disponibles pour JavaScript basé sur un navigateur, JavaScript basé sur un serveur et Java™), un hôte AEM peut initialiser l’objet client d’AEM Headless avec le service AEM auquel se connecter.
Lors du développement d’un client AEM Headless personnalisé, assurez-vous que l’hôte du service AEM est paramétrable en fonction des paramètres de création.
Exemples
Vous trouverez ci-dessous des exemples de la manière dont les requêtes d’API GraphQL d’AEM peuvent rendre la valeur d’hôte AEM configurable pour différents frameworks d’application découplée.
Cet exemple, basé librement sur l’application React AEM Headless, illustre la manière dont les requêtes d’API GraphQL d’AEM peuvent être configurées pour se connecter à différents services AEM en fonction des variables d’environnement.
Les applications React doivent utiliser le client AEM Headless pour JavaScript pour interagir avec les API GraphQL d’AEM. Le client AEM Headless, fourni par le client AEM Headless pour JavaScript, doit être initialisé avec l’hôte du service AEM auquel il se connecte.
Fichier d’environnement React
React utilise des fichiers d’environnement personnalisés, ou fichiers .env
, stockés à la racine du projet pour définir des valeurs spécifiques à la création. Par exemple, le fichier .env.development
contient les valeurs utilisées lors du développement, tandis que .env.production
contient les valeurs utilisées pour les créations de production.
.env.development
code language-none |
---|
|
Les fichiers .env
destinés à d’autres fins peuvent être spécifiés en postfixant .env
et un descripteur sémantique, tel que .env.stage
ou .env.production
. Vous pouvez utilisez des fichiers .env
différents lors de l’exécution ou de la création de l’application React, en définissant l’élément REACT_APP_ENV
avant d’exécuter une commande npm
.
Par exemple, un package.json
d’application React peut contenir la configuration scripts
suivante :
package.json
code language-none |
---|
|
Client AEM Headless
Le client AEM Headless pour JavaScript contient un client AEM Headless qui effectue des requêtes HTTP aux API GraphQL d’AEM. Le client AEM Headless doit être initialisé avec l’hôte AEM avec lequel il interagit, à l’aide de la valeur du fichier .env
actif.
src/api/headlessClient.js
code language-none |
---|
|
Hook React useEffect(…)
Les hooks React useEffect personnalisés appellent le client AEM Headless, initialisé avec l’hôte AEM, au nom du composant React qui effectue le rendu de la vue.
src/api/persistedQueries.js
code language-javascript |
---|
|
Composant React
Le hook useEffect personnalisé useAdventureByPath
est importé et utilisé pour obtenir les données à l’aide du client AEM Headless. Il effectue le rendu du contenu à la personne utilisatrice finale.
- « src/components/AdventureDetail.js »
code language-javascript |
---|
|
Cet exemple, basé sur l’exemple d’application iOS™ AEM Headless, illustre la manière dont les requêtes d’API GraphQL d’AEM peuvent être configurées pour se connecter à différents hôtes AEM en fonction de variables de configuration spécifiques à la création.
Les applications iOS™ nécessitent un client AEM Headless personnalisé pour interagir avec les API GraphQL d’AEM. Le client AEM Headless doit être écrit de sorte que l’hôte de service AEM soit configurable.
Configuration de version
Le fichier de configuration XCode contient les détails de configuration par défaut.
Config.xcconfig
code language-swift |
---|
|
Initialiser le client AEM Headless personnalisé
L’exemple d’application AEM Headless iOS utilise un client AEM Headless personnalisé et initialisé avec les valeurs de configuration pour AEM_SCHEME
et AEM_HOST
.
code language-swift |
---|
|
Le client AEM Headless personnalisé (api/Aem.swift
) contient une méthode makeRequest(..)
qui préfixe les requêtes d’API AEM GraphQL avec scheme
et host
configurés pour AEM.
api/Aem.swift
code language-swift |
---|
|
Vous pouvez créer de nouveaux fichiers de configuration de version pour vous connecter à différents services AEM. Les valeurs spécifiques à la version pour AEM_SCHEME
et AEM_HOST
sont utilisées en fonction de la version sélectionnée dans XCode. Ainsi, le client AEM Headless personnalisé se connecte au service AEM approprié.
Cet exemple, basé sur l’exemple d’application AEM Headless Android™, illustre la manière dont les requêtes d’API AEM GraphQL peuvent être configurées pour se connecter à différents services AEM en fonction de variables de configuration spécifiques à la version (ou aux versions).
Les applications Android™ (lorsqu’elles sont écrites en Java™) doivent utiliser la variable Client AEM Headless pour Java™ pour interagir avec les API GraphQL d’AEM. Le client AEM Headless, fourni par le client AEM Headless pour Java™, doit être initialisé avec l’hôte de service AEM auquel il se connecte.
Créer un fichier de configuration
Les applications Android™ définissent des « productFlavors » utilisés pour créer des artefacts à diverses fins.
Cet exemple montre comment deux versions de produit Android™ peuvent être définies, fournissant différents hôtes de service AEM (AEM_HOST
) pour les valeurs de développement (dev
) et de production (prod
).
Dans le fichier build.gradle
de l’application, un nouvel élément flavorDimension
nommé env
est créé.
Dans la dimension env
, deux productFlavors
sont définis : dev
et prod
. Chaque productFlavor
utilise buildConfigField
pour définir des variables spécifiques à la version définissant le service AEM auquel se connecter.
app/build.gradle
code language-gradle |
---|
|
Chargeur Android™
Initialisez le créateur AEMHeadlessClient
fourni par le client AEM Headless pour Java™ avec la valeur AEM_HOST
du champ buildConfigField
.
app/src/main/java/com/adobe/wknd/androidapp/loader/AdventuresLoader.java
code language-java |
---|
|
Lors de la création de l’application Android™ pour différentes utilisations, spécifiez la version env
pour que la valeur d’hôte AEM correspondante soit utilisée.
URL des images AEM
Les requêtes d’images de l’application découplée à AEM doivent être configurées pour interagir avec le service AEM approprié, comme décrit dans le tableau ci-dessus.
Adobe recommande d’utiliser des images optimisées mises à disposition par le biais du champ _dynamicUrl
dans les API GraphQL d’AEM. Le champ _dynamicUrl
renvoie une URL sans hôte qui peut être précédée de l’hôte de service AEM utilisé pour interroger les API GraphQL d’AEM. Pour le champ _dynamicUrl
dans GraphQL, la réponse ressemble à ce qui suit :
{
...
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--dd42d814-88ec-4c4d-b5ef-e3dc4bc0cb42/example.jpg?preferwebp=true",
...
}
Exemples
Vous trouverez ci-dessous des exemples de la manière dont les URL d’image peuvent ajouter un préfixe à la valeur d’hôte AEM configurée pour différentes structures d’application découplées. Les exemples supposent l’utilisation de requêtes GraphQL qui renvoient des références d’image à l’aide du champ _dynamicUrl
.
Par exemple :
Requête persistante GraphQL
Cette requête GraphQL renvoie la variable _dynamicUrl
de la référence de l’image. C’est ce que montre la réponse GraphQL qui exclut un hôte.
query ($path: String!) {
adventureByPath(_path: $path, _assetTransform: { format: JPG, preferWebp: true }) {
item {
title,
primaryImage {
... on ImageRef {
_dynamicUrl
}
}
}
}
}
Réponse GraphQL
Cette réponse GraphQL renvoie la variable _dynamicUrl
de la référence d’image qui exclut un hôte.
{
"data": {
"adventureByPath": {
"item": {
"adventurePrimaryImage": {
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--de43411-88ec-4c4d-b5ef-e3dc4bc0cb42/adobestock-175749320.jpg?preferwebp=true",
}
}
}
}
}
Cet exemple, basé sur l’exemple d’application AEM Headless React, illustre la manière dont les URL d’image peuvent être configurées pour se connecter aux services AEM appropriés en fonction des variables d’environnement.
Cet exemple montre comment ajouter un préfixe au champ _dynamicUrl
de référence de l’image avec une variable d’environnement React REACT_APP_AEM_HOST
configurable.
Fichier d’environnement React
React utilise des fichiers d’environnement personnalisés, ou fichiers .env
, stockés à la racine du projet pour définir des valeurs spécifiques à la création. Par exemple, le fichier .env.development
contient les valeurs utilisées lors du développement, tandis que .env.production
contient les valeurs utilisées pour les créations de production.
.env.development
code language-none |
---|
|
Les fichiers .env
destinés à d’autres fins peuvent être spécifiés en ajoutant un suffixe .env
et un descripteur sémantique, tel que .env.stage
ou .env.production
. Un fichier .env
différent peut être utilisé lors de l’exécution ou de la création de l’application React, en définissant la variable REACT_APP_ENV
avant d’exécuter une commande npm
.
Par exemple, la variable package.json
de l’application React peut contenir la configuration scripts
suivante :
package.json
code language-none |
---|
|
Composant React
Le composant React importe la variable d’environnement REACT_APP_AEM_HOST
et ajoute un préfixe à la valeur _dynamicUrl
de l’image pour fournir une URL d’image entièrement résolvable.
La même variable d’environnement REACT_APP_AEM_HOST
est utilisée pour initialiser le client AEM Headless utilisé par le hook useEffect useAdventureByPath(..)
personnalisé, lui-même utilisé pour récupérer les données GraphQL à partir d’AEM. En utilisant la même variable pour construire la requête d’API GraphQL comme URL d’image, assurez-vous que l’application React interagit avec le même service AEM pour les deux cas d’utilisation.
- « src/components/AdventureDetail.js »
code language-javascript |
---|
|
Cet exemple, basé sur l’exemple d’application AEM Headless iOS™, illustre comment les URL des images AEM peuvent être configurées pour se connecter à différents hôtes AEM en fonction de variables de configuration spécifiques à la version.
Configuration de version
Le fichier de configuration XCode contient les détails de configuration par défaut.
Config.xcconfig
code language-swift |
---|
|
Générateur d’URL d’image
Dans Aem.swift
, l’implémentation du client AEM découplé personnalisée, qui est une fonction personnalisée imageUrl(..)
, emprunte le chemin d’accès à l’image, comme indiqué dans le champ _dynamicUrl
dans la réponse GraphQL, et y ajoute l’hôte AEM comme préfixe. Cette fonction est ensuite appelée dans les vues iOS chaque fois qu’une image est rendue.
WKNDAdventures/AEM/Aem.swift
code language-swift |
---|
|
Vue iOS
La vue iOS ajoute un préfixe à la valeur de l’image _dynamicUrl
pour fournir une URL d’image entièrement résolvable.
WKNDAdventures/Views/AdventureListItemView.swift
code language-swift |
---|
|
Vous pouvez créer de nouveaux fichiers de configuration de version pour vous connecter à différents services AEM. Les valeurs spécifiques à la version de AEM_SCHEME
et AEM_HOST
sont utilisées en fonction de la version sélectionnée dans XCode, ce qui entraîne l’interaction du client AEM Headless personnalisé avec le service AEM correct.
Cet exemple, basé sur l’exemple d’application AEM Android™ Headless, illustre comment les URL des images AEM peuvent être configurées pour se connecter à différents services AEM en fonction de variables de configuration spécifiques à la version (ou aux versions).
Créer un fichier de configuration
Les applications Android™ définissent des « productFlavors » qui sont utilisés pour créer des artefacts à des fins différentes.
Cet exemple montre comment deux versions de produit Android™ peuvent être définies, fournissant différents hôtes de service AEM (AEM_HOST
) pour les valeurs de développement (dev
) et de production (prod
).
Dans le fichier build.gradle
de l’application, un nouvel élément flavorDimension
nommé env
est créé.
Dans la dimension env
, deux productFlavors
sont définis : dev
et prod
. Chaque productFlavor
utilise buildConfigField
pour définir des variables spécifiques à la version, définissant le service AEM auquel se connecter.
app/build.gradle
code language-gradle |
---|
|
Charger l’image AEM
Android™ utilise ImageGetter
pour récupérer et mettre en cache localement les données d’image d’AEM. Dans prepareDrawableFor(..)
, l’hôte de service AEM, défini dans la configuration de version principale, est utilisé pour préfixer le chemin d’accès à l’image, créant une URL résolvable dans AEM.
app/src/main/java/com/adobe/wknd/androidapp/loader/RemoteImagesCache.java
code language-java |
---|
|
Vue Android™
La vue Android™ récupère les données d’image au moyen de RemoteImagesCache
en utilisant la valeur _dynamicUrl
de la réponse GraphQL.
app/src/main/java/com/adobe/wknd/androidapp/AdventureDetailFragment.java
code language-java |
---|
|
Lors de la création de l’application Android™ pour différentes utilisations, spécifiez la version env
pour que la valeur d’hôte AEM correspondante soit utilisée.