Administración de hosts de AEM
La implementación de una aplicación sin encabezado de AEM requiere atención sobre cómo se construyen las URL de AEM para garantizar que se utilice el host/dominio de AEM correcto. Los tipos de solicitud/URL principales que se deben tener en cuenta son:
- Solicitudes HTTP a API de AEM GraphQL
- URL de imagen a recursos de imagen referenciados en fragmentos de contenido y entregados por AEM
Normalmente, una aplicación sin encabezado de AEM interactúa con un único servicio de AEM tanto para la API de GraphQL como para las solicitudes de imagen. El servicio AEM cambia en función de la implementación de la aplicación sin encabezado de AEM:
Para gestionar las permutaciones de tipo de implementación, cada implementación de aplicación se crea con una configuración que especifica el servicio de AEM al que conectarse. A continuación, el host/dominio del servicio AEM configurado se utiliza para construir las URL de la API de AEM GraphQL y las URL de imagen. Para determinar el método correcto para administrar las configuraciones dependientes de la compilación, consulte la documentación del marco de trabajo de la aplicación de AEM sin encabezado (por ejemplo, React, iOS™ Android, etc.), ya que el método varía según el marco de trabajo.
Los siguientes son ejemplos de posibles enfoques para construir direcciones URL para la API de AEM GraphQL y solicitudes de imagen, para varios marcos y plataformas sin encabezado populares.
Solicitudes de API de AEM GraphQL
Las solicitudes HTTP GET de la aplicación sin encabezado a las API de GraphQL de AEM deben configurarse para interactuar con el servicio AEM correcto, tal como se describe en la tabla anterior.
Al utilizar SDK sin encabezado de AEM (disponible para JavaScript basado en explorador, JavaScript basado en servidor y Java™), un host de AEM puede inicializar el objeto de cliente sin encabezado de AEM con el servicio de AEM con el que conectarse.
Al desarrollar un cliente sin encabezado de AEM personalizado, asegúrese de que el host del servicio AEM pueda parametrizarse en función de los parámetros de compilación.
Ejemplos
A continuación se muestran ejemplos de cómo las solicitudes de API de AEM GraphQL pueden tener el valor de host de AEM configurado para varios marcos de aplicaciones sin encabezado.
Este ejemplo, basado de forma flexible en la aplicación AEM Headless React, ilustra cómo las solicitudes de la API de AEM GraphQL se pueden configurar para conectarse a diferentes servicios de AEM en función de variables de entorno.
Las aplicaciones de React deben usar AEM Headless Client for JavaScript para interactuar con las API de GraphQL de AEM. El cliente sin encabezado de AEM, proporcionado por el cliente sin encabezado de AEM para JavaScript, debe inicializarse con el host del servicio de AEM al que se conecta.
Archivo de entorno de React
React usa archivos de entorno personalizados o .env
archivos almacenados en la raíz del proyecto para definir valores específicos de la compilación. Por ejemplo, el archivo .env.development
contiene valores utilizados para durante el desarrollo, mientras que .env.production
contiene valores utilizados para las compilaciones de producción.
.env.development
code language-none |
---|
|
.env
archivos para otros usos se pueden especificar mediante la corrección posterior de .env
y un descriptor semántico, como .env.stage
o .env.production
. Se pueden usar .env
archivos diferentes al ejecutar o generar la aplicación React, configurando REACT_APP_ENV
antes de ejecutar un comando npm
.
Por ejemplo, la aplicación React package.json
puede contener la siguiente configuración scripts
:
package.json
code language-none |
---|
|
cliente sin encabezado de AEM
El cliente sin encabezado de AEM para JavaScript contiene un cliente sin encabezado de AEM que realiza solicitudes HTTP a las API de GraphQL de AEM. El cliente sin encabezado de AEM debe inicializarse con el host de AEM con el que interactúa, utilizando el valor del archivo .env
activo.
src/api/headlessClient.js
code language-none |
---|
|
React: enlace useEffect(…)
Los vínculos personalizados de React useEffect llaman al cliente sin encabezado de AEM, inicializado con el host de AEM, en nombre del componente React que procesa la vista.
src/api/persistedQueries.js
code language-javascript |
---|
|
Componente React
Se importó el vínculo personalizado useEffect useAdventureByPath
y se utilizó para obtener los datos mediante el cliente sin encabezado de AEM y, finalmente, para representar el contenido al usuario final.
- 'src/components/AdventureDetail.js'
code language-javascript |
---|
|
Este ejemplo, basado en el ejemplo de aplicación iOS™ sin encabezado de AEM, ilustra cómo se pueden configurar las solicitudes de la API de GraphQL de AEM para conectarse a diferentes hosts de AEM en función de variables de configuración específicas de la compilación.
Las aplicaciones de iOS™ requieren un cliente sin encabezado de AEM personalizado para interactuar con las API de GraphQL de AEM. El cliente sin encabezado de AEM debe escribirse de modo que el host del servicio AEM sea configurable.
Generar configuración
El archivo de configuración XCode contiene los detalles de configuración predeterminados.
Config.xcconfig
code language-swift |
---|
|
Inicialice el cliente sin encabezado personalizado de AEM
La aplicación iOS sin encabezado de AEM de ejemplo usa un cliente sin encabezado de AEM personalizado inicializado con los valores de configuración para AEM_SCHEME
y AEM_HOST
.
code language-swift |
---|
|
El cliente personalizado sin encabezado de AEM (api/Aem.swift
) contiene un método makeRequest(..)
que prefija las solicitudes de API de AEM GraphQL con los AEM scheme
y host
configurados.
api/Aem.swift
code language-swift |
---|
|
Se pueden crear nuevos archivos de configuración de compilación para conectarse a diferentes servicios de AEM. Los valores específicos de la compilación para AEM_SCHEME
y AEM_HOST
se utilizan en función de la compilación seleccionada en XCode, lo que da como resultado que el cliente personalizado sin encabezado de AEM se conecte con el servicio de AEM correcto.
Este ejemplo, basado en el ejemplo de aplicación Android™ sin encabezado de AEM, ilustra cómo se pueden configurar las solicitudes de la API de GraphQL de AEM para conectarse a diferentes servicios de AEM en función de variables de configuración específicas de la compilación (o variantes).
Las aplicaciones de Android™ (cuando se escriben en Java™) deben usar AEM Headless Client for Java™ para interactuar con las API de GraphQL de AEM. El cliente sin encabezado de AEM, proporcionado por el cliente sin encabezado de AEM para Java™, debe inicializarse con el host del servicio de AEM al que se conecta.
Generar archivo de configuración
Las aplicaciones de Android™ definen "productFlavors", que se utilizan para crear artefactos para diferentes usos.
Este ejemplo muestra cómo se pueden definir dos tipos de productos Android™, proporcionando valores de hosts de servicio AEM (AEM_HOST
) diferentes para los usos de desarrollo (dev
) y producción (prod
).
En el archivo build.gradle
de la aplicación, se crea un nuevo(a) flavorDimension
denominado env
.
En la dimensión env
, se han definido dos productFlavors
: dev
y prod
. Cada productFlavor
usa buildConfigField
para establecer variables específicas de la compilación que definen el servicio de AEM al que se va a conectar.
app/build.gradle
code language-gradle |
---|
|
Cargador Android™
Inicialice el generador AEMHeadlessClient
, proporcionado por el cliente sin encabezado de AEM para Java™ con el valor AEM_HOST
del campo buildConfigField
.
app/src/main/java/com/adobe/wknd/androidapp/loader/AdventuresLoader.java
code language-java |
---|
|
Al crear la aplicación de Android™ para diferentes usos, especifique el tipo env
y el valor de host de AEM correspondiente.
URL de imagen de AEM
Las solicitudes de imagen de la aplicación sin encabezado a AEM deben configurarse para interactuar con el servicio AEM correcto, tal como se describe en la tabla anterior.
Adobe recomienda usar imágenes optimizadas disponibles a través del campo _dynamicUrl
en las API de GraphQL de AEM. El campo _dynamicUrl
devuelve una dirección URL sin host que puede ir precedida del host de servicio de AEM utilizado para consultar las API de GraphQL de AEM. Para el campo _dynamicUrl
en la respuesta de GraphQL tiene este aspecto:
{
...
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--dd42d814-88ec-4c4d-b5ef-e3dc4bc0cb42/example.jpg?preferwebp=true",
...
}
Ejemplos
A continuación se muestran ejemplos de cómo las direcciones URL de imagen pueden anteponer el valor de host de AEM, que se puede configurar para varios marcos de aplicaciones sin encabezado. Los ejemplos suponen el uso de consultas de GraphQL que devuelven referencias de imagen utilizando el campo _dynamicUrl
.
Por ejemplo:
Consulta persistente de GraphQL
Esta consulta de GraphQL devuelve un _dynamicUrl
de referencia de imagen. Como se ve en la respuesta de GraphQL, que excluye un host.
query ($path: String!) {
adventureByPath(_path: $path, _assetTransform: { format: JPG, preferWebp: true }) {
item {
title,
primaryImage {
... on ImageRef {
_dynamicUrl
}
}
}
}
}
Respuesta de GraphQL
Esta respuesta de GraphQL devuelve el _dynamicUrl
de la referencia de imagen que excluye un host.
{
"data": {
"adventureByPath": {
"item": {
"adventurePrimaryImage": {
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--de43411-88ec-4c4d-b5ef-e3dc4bc0cb42/adobestock-175749320.jpg?preferwebp=true",
}
}
}
}
}
Este ejemplo, basado en el ejemplo de aplicación AEM Headless React, ilustra cómo se pueden configurar las direcciones URL de imagen para conectarse a los servicios de AEM correctos en función de las variables de entorno.
Este ejemplo muestra el prefijo del campo de referencia de imagen _dynamicUrl
, con una variable de entorno React REACT_APP_AEM_HOST
configurable.
Archivo de entorno de React
React usa archivos de entorno personalizados o .env
archivos almacenados en la raíz del proyecto para definir valores específicos de la compilación. Por ejemplo, el archivo .env.development
contiene valores utilizados para durante el desarrollo, mientras que .env.production
contiene valores utilizados para las compilaciones de producción.
.env.development
code language-none |
---|
|
.env
archivos para otros usos se pueden especificar mediante la corrección posterior de .env
y un descriptor semántico, como .env.stage
o .env.production
. Se puede usar un archivo .env
diferente al ejecutar o generar la aplicación React, configurando REACT_APP_ENV
antes de ejecutar un comando npm
.
Por ejemplo, la aplicación React package.json
puede contener la siguiente configuración scripts
:
package.json
code language-none |
---|
|
Componente React
El componente React importa la variable de entorno REACT_APP_AEM_HOST
y prefija el valor de la imagen _dynamicUrl
para proporcionar una dirección URL de imagen totalmente solucionable.
Esta misma variable de entorno REACT_APP_AEM_HOST
se usa para inicializar el cliente sin encabezado de AEM que usa el vínculo useEffect personalizado useAdventureByPath(..)
que se usa para recuperar los datos de GraphQL de AEM. Utilizando la misma variable para construir la solicitud de API de GraphQL como la dirección URL de la imagen, asegúrese de que la aplicación React interactúa con el mismo servicio de AEM para ambos casos de uso.
- 'src/components/AdventureDetail.js'
code language-javascript |
---|
|
Este ejemplo, basado en el ejemplo de aplicación iOS™ sin encabezado de AEM, ilustra cómo se pueden configurar las URL de imágenes de AEM para conectarse a diferentes hosts de AEM en función de variables de configuración específicas de la compilación.
Generar configuración
El archivo de configuración XCode contiene los detalles de configuración predeterminados.
Config.xcconfig
code language-swift |
---|
|
Generador de URL de imagen
En Aem.swift
, la implementación personalizada de cliente sin encabezado de AEM, una función personalizada imageUrl(..)
toma la ruta de acceso de la imagen como se indica en el campo _dynamicUrl
de la respuesta de GraphQL y la antepone al host de AEM. A continuación, esta función se invoca en las vistas de iOS cada vez que se procesa una imagen.
WKNDAdventures/AEM/Aem.swift
code language-swift |
---|
|
Vista de iOS
La vista de iOS y los prefijos del valor de la imagen _dynamicUrl
para proporcionar una dirección URL de imagen totalmente solucionable.
WKNDAdventures/Views/AdventureListItemView.swift
code language-swift |
---|
|
Se pueden crear nuevos archivos de configuración de compilación para conectarse a diferentes servicios de AEM. Los valores específicos de la compilación para AEM_SCHEME
y AEM_HOST
se utilizan en función de la compilación seleccionada en XCode, lo que da como resultado que el cliente personalizado sin encabezado de AEM interactúe con el servicio de AEM correcto.
Este ejemplo, basado en el ejemplo de aplicación Android™ sin encabezado de AEM, ilustra cómo se pueden configurar las direcciones URL de imágenes de AEM para conectarse a diferentes servicios de AEM en función de variables de configuración específicas de la compilación (o variantes).
Generar archivo de configuración
Las aplicaciones de Android™ definen "productFlavors", que se utilizan para crear artefactos para diferentes usos.
Este ejemplo muestra cómo se pueden definir dos tipos de productos Android™, proporcionando valores de hosts de servicio AEM (AEM_HOST
) diferentes para los usos de desarrollo (dev
) y producción (prod
).
En el archivo build.gradle
de la aplicación, se crea un nuevo(a) flavorDimension
denominado env
.
En la dimensión env
, se han definido dos productFlavors
: dev
y prod
. Cada productFlavor
usa buildConfigField
para establecer variables específicas de la compilación que definen el servicio de AEM al que se va a conectar.
app/build.gradle
code language-gradle |
---|
|
Carga de la imagen de AEM
Android™ usa un ImageGetter
para recuperar y almacenar en caché localmente los datos de imagen de AEM. En prepareDrawableFor(..)
, el host de servicio de AEM, definido en la configuración de compilación activa, se usa para prefijar la ruta de acceso de la imagen creando una dirección URL solucionable en AEM.
app/src/main/java/com/adobe/wknd/androidapp/loader/RemoteImagesCache.java
code language-java |
---|
|
Vista de Android™
La vista Android™ obtiene los datos de imagen por medio de RemoteImagesCache
usando el valor _dynamicUrl
de la respuesta de GraphQL.
app/src/main/java/com/adobe/wknd/androidapp/AdventureDetailFragment.java
code language-java |
---|
|
Al crear la aplicación de Android™ para diferentes usos, especifique el tipo env
y el valor de host de AEM correspondiente.