Gerenciamento de hosts AEM
A implantação de um aplicativo AEM headless requer atenção a como URLs AEM são construídos para garantir que o host/domínio AEM correto seja usado. Os principais tipos de URL/solicitação que devem ser considerados são:
- Solicitações HTTP para APIs do GraphQL para AEM
- URLs de imagem para ativos de imagem referenciados em Fragmentos de conteúdo e entregues pelo AEM
Normalmente, um aplicativo AEM headless interage com um único serviço AEM para solicitações de API e imagens do GraphQL. O serviço AEM muda com base na implantação do aplicativo AEM Headless:
Para lidar com permutas do tipo de implantação, cada implantação de aplicativo é criada usando uma configuração que especifica o serviço AEM ao qual se conectar. O host/domínio do serviço AEM configurado é então usado para construir os URLs da API AEM GraphQL e os URLs de imagem. 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 GraphQL do AEM e solicitações de imagem, para várias estruturas e plataformas headless populares.
Solicitações de API do GraphQL para AEM
GET As solicitações HTTP do aplicativo headless para APIs AEM do GraphQL AEM devem ser configuradas para interagir com o serviço correto, conforme descrito na seção tabela acima.
Ao usar SDKs do AEM Headless (disponível para JavaScript baseado em navegador, JavaScript baseado em servidor e Java™), um host AEM pode inicializar o objeto cliente AEM Headless com o Serviço AEM para se conectar.
Ao desenvolver um cliente AEM headless personalizado, certifique-se de que o host do serviço AEM possa 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 do AEM com base em variáveis de ambiente.
Os aplicativos React devem usar o Cliente AEM Headless para JavaScript para interagir com as APIs do GraphQL AEM. O cliente AEM headless, fornecido pelo cliente AEM headless para JavaScript, deve ser inicializado com o host do serviço AEM ao qual se conecta.
Arquivo de ambiente do React
Usos do React arquivos de ambiente personalizadosou .env
arquivos, armazenados na raiz do projeto para definir valores específicos de build. Por exemplo, a variável .env.development
o arquivo contém valores usados para durante o desenvolvimento, enquanto .env.production
contém valores usados para builds de produção.
.env.development
code language-none |
---|
|
.env
arquivos para outros usos pode ser especificado por pós-fixação .env
e um descritor semântico, como .env.stage
ou .env.production
. Different .env
arquivos podem ser usados ao executar ou criar o aplicativo React, definindo o REACT_APP_ENV
antes de executar um npm
comando.
Por exemplo, um aplicativo React package.json
pode conter o seguinte scripts
config:
package.json
code language-none |
---|
|
Cliente sem periféricos AEM
A variável Cliente AEM Headless para JavaScript contém um cliente AEM headless que faz solicitações HTTP para APIs AEM GraphQL. O cliente AEM headless deve ser inicializado com o host AEM com o qual interage, usando o valor do host ativo .env
arquivo.
src/api/headlessClient.js
code language-none |
---|
|
React useEffect(…) gancho
Os ganchos useEffect personalizados do React chamam o cliente AEM Headless, inicializado com o host 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
O é 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 na variável 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 AEM com base em variáveis de configuração específicas da build.
Os aplicativos iOS™ exigem um cliente AEM headless personalizado para interagir com as APIs do AEM GraphQL. O cliente AEM Headless deve ser escrito de modo que o host do serviço AEM seja configurável.
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
A variável 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(..)
AEM que prefixa solicitações de APIs do GraphQL com o AEM configurado scheme
e host
.
api/Aem.swift
code language-swift |
---|
|
Novos arquivos de configuração de build podem ser criados para se conectar a diferentes serviços AEM. Os valores específicos de build para o AEM_SCHEME
e AEM_HOST
são usados com base no build selecionado no XCode, resultando no cliente AEM headless personalizado para se conectar com o serviço AEM correto.
Este exemplo, com base na variável 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 do AEM com base em variáveis de configuração específicas de build (ou opções).
Os aplicativos Android™ (quando escritos em Java™) devem usar o Cliente AEM Headless para Java™ para interagir com as APIs do GraphQL AEM. O cliente AEM Headless, fornecido pelo AEM Headless Client para Java™, deve ser inicializado com o host do serviço AEM ao qual ele se conecta.
Criar arquivo de configuração
Os aplicativos Android™ definem "productFlavors" usados para criar artefatos para diferentes usos.
Este exemplo mostra como duas opções de produtos Android™ podem ser definidas, fornecendo hosts de serviço AEM diferentes (AEM_HOST
) valores para o desenvolvimento (dev
) e produção (prod
) usa.
No do aplicativo build.gradle
arquivo, um novo flavorDimension
nomeado env
é criado.
No env
dimensão, dois productFlavors
são definidos: dev
e prod
. Each productFlavor
usos buildConfigField
para definir variáveis específicas de build que definem o serviço AEM ao qual se conectar.
app/build.gradle
code language-gradle |
---|
|
Carregador Android™
Inicializar o AEMHeadlessClient
construtor, fornecido pelo cliente AEM Headless para Java™ com o AEM_HOST
valor do buildConfigField
campo.
app/src/main/java/com/adobe/wknd/androidapp/loader/AdventuresLoader.java
code language-java |
---|
|
Ao criar o aplicativo Android™ para diferentes usos, especifique o env
e o valor correspondente do host AEM é usado.
URLs de imagem do AEM
As solicitações de imagem do aplicativo headless para AEM devem ser configuradas para interagir com o serviço AEM correto, conforme descrito na seção acima da tabela.
O Adobe recomenda usar imagens otimizadas disponibilizado através do _dynamicUrl
nas APIs AEM GraphQL. A variável _dynamicUrl
O campo retorna um URL sem host que pode receber o prefixo do host do serviço AEM usado para consultar APIs do AEM GraphQL. Para o _dynamicUrl
O campo na resposta do GraphQL é semelhante a:
{
...
"_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 pressupõem o uso de queries GraphQL que retornam referências de imagem usando o _dynamicUrl
campo.
Por exemplo:
Consulta persistente do GraphQL
Essa consulta do GraphQL retorna uma imagem de referência _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
Essa resposta do GraphQL retorna a imagem de referência _dynamicUrl
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 na variável exemplo de aplicativo AEM Headless React, ilustra como URLs de imagens podem ser configurados para se conectar aos Serviços AEM corretos com base em variáveis de ambiente.
Este exemplo mostra como adicionar o prefixo à referência da imagem _dynamicUrl
, com um campo configurável REACT_APP_AEM_HOST
Variável de ambiente do React.
Arquivo de ambiente do React
Usos do React arquivos de ambiente personalizadosou .env
arquivos, armazenados na raiz do projeto para definir valores específicos de build. Por exemplo, a variável .env.development
o arquivo contém valores usados para durante o desenvolvimento, enquanto .env.production
contém valores usados para builds de produção.
.env.development
code language-none |
---|
|
.env
arquivos para outros usos pode ser especificado por pós-fixação .env
e um descritor semântico, como .env.stage
ou .env.production
. Different .env
arquivo pode ser usado ao executar ou criar o aplicativo React, definindo o REACT_APP_ENV
antes de executar um npm
comando.
Por exemplo, um aplicativo React package.json
pode conter o seguinte scripts
config:
package.json
code language-none |
---|
|
Componente do React
O componente React importa o REACT_APP_AEM_HOST
e prefixa a imagem _dynamicUrl
para fornecer um URL de imagem totalmente resolvível.
Este mesmo REACT_APP_AEM_HOST
é utilizada para inicializar o cliente AEM Headless utilizado pelo useAdventureByPath(..)
o gancho useEffect personalizado usado para buscar os dados do GraphQL do 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 de AEM para ambos os casos de uso.
- 'src/components/AdventureDetail.js'
code language-javascript |
---|
|
Este exemplo, com base na variável exemplo de aplicativo AEM Headless iOS™, ilustra como URLs de imagens de AEM podem ser configuradas para se conectar a diferentes hosts AEM com base em variáveis de configuração específicas da build.
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
Entrada Aem.swift
, a implementação de cliente AEM headless personalizada, uma função personalizada imageUrl(..)
toma o caminho da imagem conforme fornecido na _dynamicUrl
na resposta do GraphQL, e coloca o host AEM como prefixo. 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 visualização do iOS e os prefixos da imagem _dynamicUrl
para fornecer um URL de imagem totalmente resolvível.
WKNDAdventures/Views/AdventureListItemView.swift
code language-swift |
---|
|
Novos arquivos de configuração de build podem ser criados para se conectar a diferentes serviços AEM. Os valores específicos de build para o AEM_SCHEME
e AEM_HOST
são usados com base na build selecionada no XCode, resultando no cliente AEM headless personalizado para interagir com o serviço AEM correto.
Este exemplo, com base na variável exemplo de aplicativo AEM Headless Android™, ilustra como URLs de imagens de AEM podem ser configuradas para se conectar a diferentes Serviços de AEM com base em variáveis de configuração específicas de build (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 Android™ podem ser definidas, fornecendo hosts de serviço AEM diferentes (AEM_HOST
) valores para o desenvolvimento (dev
) e produção (prod
) usa.
No do aplicativo build.gradle
arquivo, um novo flavorDimension
nomeado env
é criado.
No env
dimensão, dois productFlavors
são definidos: dev
e prod
. Each productFlavor
usos buildConfigField
para definir variáveis específicas de build 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 obter e armazenar em cache localmente dados de imagem do AEM. Entrada prepareDrawableFor(..)
o host de serviço AEM, definido na configuração de build ativa, é usado para prefixar o caminho da imagem, criando um URL que pode ser resolvido para AEM.
app/src/main/java/com/adobe/wknd/androidapp/loader/RemoteImagesCache.java
code language-java |
---|
|
Visualização do Android™
A visualização Android™ obtém os dados da imagem por meio da variável RemoteImagesCache
usando o _dynamicUrl
valor 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 env
e o valor correspondente do host AEM é usado.