管理AEM主机
部署AEM Headless应用程序时,需要注意AEM URL的构建方式,以确保使用正确的AEM主机/域。 要了解的主要URL/请求类型为:
- 对 AEM GraphQL API 的HTTP请求
- 图像URL,指向内容片段中引用并由AEM交付的图像资产
通常,AEM Headless应用程序会与单个AEM服务交互,以用于GraphQL API和图像请求。 AEM服务根据AEM Headless应用程序部署发生更改:
为了处理部署类型排列,每个应用程序部署都是使用指定要连接的AEM服务的配置构建的。 随后使用配置的AEM服务的主机/域来构建AEM GraphQL API URL和图像URL。 要确定管理生成相关配置的正确方法,请参阅AEM Headless应用程序的框架(例如,React、iOS™Android等)文档,因为该方法因框架而异。
以下是一些可能的方法示例,这些方法用于为几个常用的Headless框架和平台构建AEM GraphQL API和图像请求的URL。
AEM GraphQL API请求
必须将从Headless应用程序到AEM的GraphQL API的HTTPGET请求配置为与正确的AEM服务交互,如上面🔗的表中所述。
使用AEM Headless SDK(可用于基于浏览器的JavaScript、基于服务器的JavaScript和Java™)时,AEM主机可以通过AEM服务初始化要连接的AEM Headless客户端对象。
在开发自定义AEM Headless客户端时,请确保AEM服务的主机可以根据构建参数进行参数化。
示例
以下示例用于说明AEM GraphQL API请求如何能够让针对各种Headless应用程序框架配置AEM主机值。
此示例大致基于AEM Headless React应用程序,说明了如何将AEM GraphQL API请求配置为根据环境变量连接到不同的AEM Services。
React应用程序应使用AEM Headless Client for JavaScript与AEM的GraphQL API交互。 由AEM Headless Client for JavaScript提供的AEM Headless客户端必须使用它连接到的AEM Service主机进行初始化。
React环境文件
React使用存储在项目根目录中的自定义环境文件或.env
文件定义生成特定的值。 例如,.env.development
文件包含在开发期间使用的值,而.env.production
包含用于生产内部版本的值。
.env.development
code language-none |
---|
|
可以通过后缀.env
和语义描述符(如.env.stage
或.env.production
)来指定其他用户的.env
文件。 通过在执行npm
命令之前设置REACT_APP_ENV
,可在运行或构建React应用程序时使用不同的.env
文件。
例如,React应用程序的package.json
可能包含以下scripts
配置:
package.json
code language-none |
---|
|
AEM headless客户端
JavaScript🔗的AEM Headless客户端包含一个AEM Headless客户端,该客户端向AEM的GraphQL API发出HTTP请求。 必须使用活动.env
文件中的值将AEM Headless客户端与其交互的AEM主机初始化。
src/api/headlessClient.js
code language-none |
---|
|
React useEffect(…) 挂钩
自定义React useEffect挂接调用AEM Headless客户端,通过AEM主机初始化,以代表呈现视图的React组件。
src/api/persistedQueries.js
code language-javascript |
---|
|
React组件
自定义useEffect挂接useAdventureByPath
已导入,用于使用AEM Headless客户端获取数据,并最终向最终用户呈现内容。
- 'src/components/AdventureDetail.js'
code language-javascript |
---|
|
此示例基于示例AEM Headless iOS™应用程序,说明了如何将AEM GraphQL API请求配置为根据特定于内部版本的配置变量连接到不同的AEM主机。
iOS™应用程序需要自定义AEM Headless客户端才能与AEM的GraphQL API交互。 必须编写AEM Headless客户端,以便配置AEM服务主机。
生成配置
XCode配置文件包含默认配置详细信息。
Config.xcconfig
code language-swift |
---|
|
初始化自定义AEM headless客户端
示例AEM Headless iOS应用程序使用用配置值AEM_SCHEME
和AEM_HOST
初始化的自定义AEM Headless客户端。
code language-swift |
---|
|
自定义AEM Headless客户端(api/Aem.swift
)包含方法makeRequest(..)
,该方法使用配置的AEM scheme
和host
为AEM GraphQL API请求添加前缀。
api/Aem.swift
code language-swift |
---|
|
可以创建新的生成配置文件以连接到其他AEM服务。 AEM_SCHEME
和AEM_HOST
的生成特定值是基于XCode中的选定生成而使用的,从而导致自定义AEM Headless客户端与正确的AEM服务连接。
此示例基于示例AEM Headless Android™应用程序,说明了如何将AEM GraphQL API请求配置为根据特定于内部版本(或风格)的配置变量连接到不同的AEM Services。
Android™应用程序(使用Java™编写时)应使用AEM Headless Client for Java™与AEM的GraphQL API交互。 由AEM Headless Client for Java™提供的AEM Headless客户端必须使用它连接到的AEM Service主机进行初始化。
生成配置文件
Android™应用程序定义“productFlavors”,用于为不同用途生成工件。
此示例说明如何定义两种Android™产品风格,为开发(dev
)和生产(prod
)使用提供不同的AEM服务主机(AEM_HOST
)值。
在应用程序的build.gradle
文件中,创建了名为env
的新flavorDimension
。
在env
维度中,定义了两个productFlavors
: dev
和prod
。 每个productFlavor
都使用buildConfigField
来设置用于定义要连接的AEM服务的生成特定变量。
app/build.gradle
code language-gradle |
---|
|
Android™加载器
使用buildConfigField
字段中的AEM_HOST
值初始化由AEM Headless Client for Java™提供的AEMHeadlessClient
生成器。
app/src/main/java/com/adobe/wknd/androidapp/loader/AdventuresLoader.java
code language-java |
---|
|
为不同用途构建Android™应用程序时,请指定env
风格,并使用相应的AEM主机值。
AEM图像URL
必须将从Headless应用程序向AEM发出的图像请求配置为与正确的AEM服务交互,如上表🔗中的所述。
Adobe建议使用AEM GraphQL API中通过_dynamicUrl
字段提供的优化图像。 _dynamicUrl
字段返回的无主机URL,该URL可以带有用于查询AEM GraphQL API的AEM服务主机的前缀。 对于GraphQL响应中的_dynamicUrl
字段,如下所示:
{
...
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--dd42d814-88ec-4c4d-b5ef-e3dc4bc0cb42/example.jpg?preferwebp=true",
...
}
示例
以下示例介绍了图像URL如何为AEM主机值添加前缀,该主机值可针对各种Headless应用程序框架进行配置。 这些示例假定使用通过_dynamicUrl
字段返回图像引用的GraphQL查询。
例如:
GraphQL持久查询
此GraphQL查询返回图像引用的_dynamicUrl
。 如GraphQL响应中所示,该响应不包括主机。
query ($path: String!) {
adventureByPath(_path: $path, _assetTransform: { format: JPG, preferWebp: true }) {
item {
title,
primaryImage {
... on ImageRef {
_dynamicUrl
}
}
}
}
}
GraphQL响应
此GraphQL响应返回图像引用的_dynamicUrl
,其中排除了主机。
{
"data": {
"adventureByPath": {
"item": {
"adventurePrimaryImage": {
"_dynamicUrl": "/adobe/dynamicmedia/deliver/dm-aid--de43411-88ec-4c4d-b5ef-e3dc4bc0cb42/adobestock-175749320.jpg?preferwebp=true",
}
}
}
}
}
此示例基于示例AEM Headless React应用程序,说明了如何根据环境变量将图像URL配置为连接到正确的AEM Services。
此示例显示如何使用可配置的REACT_APP_AEM_HOST
React环境变量为图像引用_dynamicUrl
字段添加前缀。
React环境文件
React使用存储在项目根目录中的自定义环境文件或.env
文件定义生成特定的值。 例如,.env.development
文件包含在开发期间使用的值,而.env.production
包含用于生产内部版本的值。
.env.development
code language-none |
---|
|
可以通过后缀.env
和语义描述符(如.env.stage
或.env.production
)来指定其他用户的.env
文件。 通过在执行npm
命令之前设置REACT_APP_ENV
,可在运行或构建React应用程序时使用不同的.env
文件。
例如,React应用程序的package.json
可能包含以下scripts
配置:
package.json
code language-none |
---|
|
React组件
React组件导入REACT_APP_AEM_HOST
环境变量并为图像_dynamicUrl
值添加前缀,以提供完全可解析的图像URL。
此REACT_APP_AEM_HOST
环境变量用于初始化useAdventureByPath(..)
自定义useEffect挂接使用的AEM Headless客户端,该挂接用于从AEM获取GraphQL数据。 使用相同的变量将GraphQL API请求构造为图像URL,请确保React应用程序在两个用例中与相同的AEM服务交互。
- 'src/components/AdventureDetail.js'
code language-javascript |
---|
|
此示例基于示例AEM Headless iOS™应用程序,说明了如何将AEM图像URL配置为根据特定于内部版本的配置变量连接到不同的AEM主机。
生成配置
XCode配置文件包含默认配置详细信息。
Config.xcconfig
code language-swift |
---|
|
图像URL生成器
在Aem.swift
的自定义AEM Headless客户端实现中,自定义函数imageUrl(..)
采用GraphQL响应的_dynamicUrl
字段中提供的图像路径,并在其前面加上AEM的主机。 每当渲染图像时,都会在iOS视图中调用此函数。
WKNDAdventures/AEM/Aem.swift
code language-swift |
---|
|
iOS视图
iOS视图和为图像_dynamicUrl
值添加前缀,以提供完全可解析的图像URL。
WKNDAdventures/Views/AdventureListItemView.swift
code language-swift |
---|
|
可以创建新的生成配置文件以连接到其他AEM服务。 AEM_SCHEME
和AEM_HOST
的生成特定值是基于XCode中的选定生成而使用的,从而导致自定义AEM Headless客户端与正确的AEM服务交互。
此示例基于示例AEM Headless Android™应用程序,说明了如何将AEM图像URL配置为根据特定于内部版本(或风格)的配置变量连接到不同的AEM Services。
生成配置文件
Android™应用程序定义“productFlavors”,用于为不同用途生成工件。
此示例说明如何定义两种Android™产品风格,为开发(dev
)和生产(prod
)使用提供不同的AEM服务主机(AEM_HOST
)值。
在应用程序的build.gradle
文件中,创建了名为env
的新flavorDimension
。
在env
维度中,定义了两个productFlavors
: dev
和prod
。 每个productFlavor
都使用buildConfigField
来设置用于定义要连接的AEM服务的生成特定变量。
app/build.gradle
code language-gradle |
---|
|
加载AEM图像
Android™使用ImageGetter
从AEM获取并本地缓存图像数据。 在prepareDrawableFor(..)
中,使用在活动生成配置中定义的AEM服务主机,为创建AEM的可解析URL的图像路径添加前缀。
app/src/main/java/com/adobe/wknd/androidapp/loader/RemoteImagesCache.java
code language-java |
---|
|
Android™视图
Android™视图使用GraphQL响应中的_dynamicUrl
值通过RemoteImagesCache
获取图像数据。
app/src/main/java/com/adobe/wknd/androidapp/AdventureDetailFragment.java
code language-java |
---|
|
为不同用途构建Android™应用程序时,请指定env
风格,并使用相应的AEM主机值。