Gerenciamento de hosts do AEM
A implantação de um aplicativo AEM Headless requer atenção a como os URLs do AEM são construídos para garantir que o host/domínio correto do AEM seja usado. Os principais tipos de URL/solicitação que devem ser considerados são:
- Solicitações HTTP para APIs do AEM GraphQL
- URLs de imagem para ativos de imagem referenciados em Fragmentos de conteúdo e entregues pela AEM
Normalmente, um aplicativo do AEM Headless interage com um único serviço do AEM para solicitações de API e imagem do GraphQL. O serviço do AEM muda com base na implantação do aplicativo AEM Headless:
Para lidar com permutas de tipo de implantação, cada implantação de aplicativo é criada usando uma configuração que especifica o serviço do AEM ao qual se conectar. O host/domínio do serviço AEM configurado é usado para criar os URLs da API e os URLs de imagem do AEM GraphQL. Para determinar a abordagem correta para gerenciar configurações dependentes de criação, consulte a documentação da estrutura do aplicativo AEM Headless (por exemplo, React, iOS, Android™ e assim por diante), pois a abordagem varia de acordo com a estrutura.
A seguir estão exemplos de possíveis abordagens para a construção de URLs para API do AEM GraphQL e solicitações de imagem, para várias estruturas e plataformas headless populares.
Solicitações de API do AEM GraphQL
As solicitações HTTP do GET do aplicativo headless para as APIs GraphQL da AEM devem ser configuradas para interagir com o serviço AEM correto, conforme descrito na tabela acima.
Ao usar os SDKs do AEM Headless (disponíveis para JavaScript baseado em navegador, JavaScript baseado em servidor e Java™), um host do AEM pode inicializar o objeto de cliente do AEM Headless com o AEM Service para se conectar com o.
Ao desenvolver um cliente AEM Headless personalizado, verifique se o host do serviço AEM pode ser parametrizado com base em parâmetros de build.
Exemplos
A seguir estão exemplos de como as solicitações de API do AEM GraphQL podem fazer com que o valor de host do AEM se torne configurável para várias estruturas de aplicativo headless.
Este exemplo, vagamente baseado no aplicativo AEM Headless React, ilustra como as solicitações de API do AEM GraphQL podem ser configuradas para se conectar a diferentes serviços da AEM com base em variáveis de ambiente.
Os aplicativos React devem usar o AEM Headless Client for JavaScript para interagir com as APIs do AEM GraphQL. O cliente AEM Headless, fornecido pelo AEM Headless Client para JavaScript, deve ser inicializado com o host do AEM Service ao qual se conecta.
Arquivo de ambiente do React
O React usa arquivos de ambiente personalizados ou .env
arquivos, armazenados na raiz do projeto para definir valores específicos de compilação. Por exemplo, o arquivo .env.development
contém valores usados durante o desenvolvimento, enquanto .env.production
contém valores usados para compilações de produção.
.env.development
code language-none |
---|
|
.env
arquivos para outros usos podem ser especificados por postfix .env
e um descritor semântico, como .env.stage
ou .env.production
. Diferentes arquivos .env
podem ser usados ao executar ou criar o aplicativo React, configurando o REACT_APP_ENV
antes de executar um comando npm
.
Por exemplo, um package.json
do aplicativo React pode conter a seguinte configuração scripts
:
package.json
code language-none |
---|
|
Cliente headless do AEM
O AEM Headless Client para JavaScript contém um cliente AEM Headless que faz solicitações HTTP às APIs GraphQL da AEM. O cliente AEM Headless deve ser inicializado com o host AEM com o qual interage, usando o valor do arquivo .env
ativo.
src/api/headlessClient.js
code language-none |
---|
|
Reagir useEffect(…) gancho
Os ganchos useEffect personalizados do React chamam o cliente AEM Headless, inicializado com o host do AEM, em nome do componente React que renderiza a exibição.
src/api/persistedQueries.js
code language-javascript |
---|
|
Componente do React
O gancho personalizado useEffect, useAdventureByPath
é importado e usado para obter os dados usando o cliente AEM Headless e, por fim, renderizar o conteúdo para o usuário final.
- 'src/components/AdventureDetail.js'
code language-javascript |
---|
|
Este exemplo, com base no exemplo de aplicativo AEM Headless iOS™, ilustra como as solicitações de API do AEM GraphQL podem ser configuradas para se conectar a diferentes hosts do AEM com base nas variáveis de configuração específicas da compilação.
Os aplicativos iOS™ exigem um cliente AEM Headless personalizado para interagir com as APIs GraphQL da AEM. O cliente AEM Headless deve ser escrito de modo que o host de serviço do AEM possa ser configurado.
Configuração de build
O arquivo de configuração do XCode contém os detalhes da configuração padrão.
Config.xcconfig
code language-swift |
---|
|
Inicializar o cliente AEM headless personalizado
O exemplo de aplicativo AEM Headless iOS usa um cliente AEM headless personalizado inicializado com os valores de configuração para AEM_SCHEME
e AEM_HOST
.
code language-swift |
---|
|
O cliente AEM headless personalizado (api/Aem.swift
) contém um método makeRequest(..)
que prefixa solicitações de APIs do AEM GraphQL com o AEM configurado scheme
e host
.
api/Aem.swift
code language-swift |
---|
|
Novos arquivos de configuração de compilação podem ser criados para conexão com diferentes serviços da AEM. Os valores específicos da compilação para AEM_SCHEME
e AEM_HOST
são usados com base na compilação selecionada no XCode, resultando no cliente AEM Headless personalizado se conectar com o serviço AEM correto.
Este exemplo, baseado no exemplo de aplicativo AEM Headless Android™, ilustra como as solicitações de API do AEM GraphQL podem ser configuradas para se conectar a diferentes Serviços da AEM com base em variáveis de configuração específicas de compilação (ou tipos).
Os aplicativos Android™ (quando escritos em Java™) devem usar o AEM Headless Client for Java™ para interagir com as APIs GraphQL da AEM. O cliente AEM Headless, fornecido pelo AEM Headless Client para Java™, deve ser inicializado com o host do AEM Service ao qual ele se conecta.
Criar arquivo de configuração
Os aplicativos Android™ definem "productFlavors" que são usados para criar artefatos para diferentes usos.
Este exemplo mostra como duas opções de produtos da Android™ podem ser definidas, fornecendo valores de hosts de serviço da AEM (AEM_HOST
) diferentes para usos de desenvolvimento (dev
) e produção (prod
).
No arquivo build.gradle
do aplicativo, um novo flavorDimension
chamado env
é criado.
Na dimensão env
, dois productFlavors
são definidos: dev
e prod
. Cada productFlavor
usa buildConfigField
para definir variáveis específicas de compilação que definem o serviço AEM ao qual se conectar.
app/build.gradle
code language-gradle |
---|
|
Carregador Android™
Inicialize o construtor AEMHeadlessClient
, fornecido pelo AEM Headless Client para Java™, com o valor AEM_HOST
do campo buildConfigField
.
app/src/main/java/com/adobe/wknd/androidapp/loader/AdventuresLoader.java
code language-java |
---|
|
Ao criar o aplicativo Android™ para diferentes usos, especifique o tipo de host env
e o valor de host AEM correspondente seja usado.
URLs de imagem do AEM
As solicitações de imagem do aplicativo headless para o AEM devem ser configuradas para interagir com o serviço AEM correto, conforme descrito na tabela acima.
A Adobe recomenda usar imagens otimizadas disponibilizadas por meio do campo _dynamicUrl
nas APIs GraphQL da AEM. O campo _dynamicUrl
retorna uma URL sem host que pode receber o prefixo do host de serviço do AEM usado para consultar APIs do AEM GraphQL. O campo _dynamicUrl
na resposta do GraphQL tem a seguinte aparência:
{
...
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--dd42d814-88ec-4c4d-b5ef-e3dc4bc0cb42/example.jpg?preferwebp=true",
...
}
Exemplos
A seguir estão exemplos de como URLs de imagem podem prefixar o valor de host do AEM, tornado configurável para várias estruturas de aplicativo headless. Os exemplos presumem o uso de consultas GraphQL que retornam referências de imagem usando o campo _dynamicUrl
.
Por exemplo:
Consulta persistente do GraphQL
Esta consulta GraphQL retorna uma referência de imagem de _dynamicUrl
. Como visto na resposta do GraphQL que exclui um host.
query ($path: String!) {
adventureByPath(_path: $path, _assetTransform: { format: JPG, preferWebp: true }) {
item {
title,
primaryImage {
... on ImageRef {
_dynamicUrl
}
}
}
}
}
Resposta do GraphQL
Esta resposta do GraphQL retorna a _dynamicUrl
da referência da imagem que exclui um host.
{
"data": {
"adventureByPath": {
"item": {
"adventurePrimaryImage": {
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--de43411-88ec-4c4d-b5ef-e3dc4bc0cb42/adobestock-175749320.jpg?preferwebp=true",
}
}
}
}
}
Este exemplo, com base no exemplo do aplicativo AEM Headless React, ilustra como URLs de imagens podem ser configuradas para se conectar aos Serviços da AEM corretos com base em variáveis de ambiente.
Este exemplo mostra como adicionar um prefixo ao campo _dynamicUrl
da referência da imagem, com uma variável de ambiente REACT_APP_AEM_HOST
do React configurável.
Arquivo de ambiente do React
O React usa arquivos de ambiente personalizados ou .env
arquivos, armazenados na raiz do projeto para definir valores específicos de compilação. Por exemplo, o arquivo .env.development
contém valores usados durante o desenvolvimento, enquanto .env.production
contém valores usados para compilações de produção.
.env.development
code language-none |
---|
|
.env
arquivos para outros usos podem ser especificados por postfix .env
e um descritor semântico, como .env.stage
ou .env.production
. Um arquivo .env
diferente pode ser usado ao executar ou criar o aplicativo React, configurando o REACT_APP_ENV
antes de executar um comando npm
.
Por exemplo, um package.json
do aplicativo React pode conter a seguinte configuração scripts
:
package.json
code language-none |
---|
|
Componente do React
O componente React importa a variável de ambiente REACT_APP_AEM_HOST
e prefixa o valor da imagem _dynamicUrl
para fornecer uma URL de imagem totalmente resolvível.
A mesma variável de ambiente REACT_APP_AEM_HOST
é usada para inicializar o cliente AEM Headless usado pelo gancho useAdventureByPath(..)
custom useEffect usado para buscar os dados do GraphQL no AEM. Usando a mesma variável para criar a solicitação de API do GraphQL como o URL da imagem, verifique se o aplicativo React interage com o mesmo serviço do AEM para ambos os casos de uso.
- 'src/components/AdventureDetail.js'
code language-javascript |
---|
|
Este exemplo, com base no exemplo de aplicativo AEM Headless iOS™, ilustra como URLs de imagens do AEM podem ser configuradas para se conectar a diferentes hosts do AEM com base em variáveis de configuração específicas da compilação.
Configuração de build
O arquivo de configuração do XCode contém os detalhes da configuração padrão.
Config.xcconfig
code language-swift |
---|
|
Gerador de URL de imagem
Em Aem.swift
, a implementação de cliente headless AEM personalizado, uma função personalizada imageUrl(..)
, toma o caminho da imagem conforme fornecido no campo _dynamicUrl
na resposta do GraphQL e o anexa ao host da AEM. Essa função é invocada nas visualizações do iOS sempre que uma imagem é renderizada.
WKNDAdventures/AEM/Aem.swift
code language-swift |
---|
|
Visualização do iOS
A exibição do iOS e prefixos o valor da imagem _dynamicUrl
, para fornecer uma URL de imagem totalmente resolvível.
WKNDAdventures/Views/AdventureListItemView.swift
code language-swift |
---|
|
Novos arquivos de configuração de compilação podem ser criados para conexão com diferentes serviços da AEM. Os valores específicos da compilação para AEM_SCHEME
e AEM_HOST
são usados com base na compilação selecionada no XCode, resultando no cliente AEM Headless personalizado para interagir com o serviço AEM correto.
Este exemplo, baseado no exemplo de aplicativo AEM Headless Android™, ilustra como URLs de imagens do AEM podem ser configuradas para se conectar a diferentes Serviços da AEM com base em variáveis de configuração específicas de compilação (ou tipos).
Criar arquivo de configuração
Os aplicativos Android™ definem "productFlavors" que são usados para criar artefatos para diferentes usos.
Este exemplo mostra como duas opções de produtos da Android™ podem ser definidas, fornecendo valores de hosts de serviço da AEM (AEM_HOST
) diferentes para usos de desenvolvimento (dev
) e produção (prod
).
No arquivo build.gradle
do aplicativo, um novo flavorDimension
chamado env
é criado.
Na dimensão env
, dois productFlavors
são definidos: dev
e prod
. Cada productFlavor
usa buildConfigField
para definir variáveis específicas de compilação que definem o serviço AEM ao qual se conectar.
app/build.gradle
code language-gradle |
---|
|
Carregamento da imagem do AEM
O Android™ usa um ImageGetter
para buscar e armazenar em cache localmente dados de imagem do AEM. No prepareDrawableFor(..)
, o host de serviço do AEM, definido na configuração de compilação ativa, é usado para prefixar o caminho da imagem, criando uma URL que pode ser resolvida para o AEM.
app/src/main/java/com/adobe/wknd/androidapp/loader/RemoteImagesCache.java
code language-java |
---|
|
Android™ view
A visualização Android™ obtém os dados da imagem por meio de RemoteImagesCache
usando o valor _dynamicUrl
da resposta do GraphQL.
app/src/main/java/com/adobe/wknd/androidapp/AdventureDetailFragment.java
code language-java |
---|
|
Ao criar o aplicativo Android™ para diferentes usos, especifique o tipo de host env
e o valor de host AEM correspondente seja usado.