使用AEM Edge函数构建动态Edge Delivery Services块
了解如何从 AEM Edge块 调用Edge Delivery Services函数,以便该块可以从第三方API 获取动态数据。
Edge Delivery Services专为提高速度而构建。 它会在发布过程中生成语义HTML文档,并且页面本身没有服务器端逻辑,因此块无法单独从第三方系统获取动态数据,例如库存或定价。 直接从浏览器获取此令牌是一种替代方法,但浏览器可能没有用于进行身份验证的用户会话,并且客户端代码中的任何API令牌都是公共。
AEM Edge函数可解决此问题。 它在Adobe CDN上运行,持有凭据,代表块调用第三方API,并仅返回块所需的数据。
逻辑流如下所示:
Browser (block) → AEM Edge Function (holds credentials) → Third-party API
您将构建的内容
在本教程中,您将构建一个端到端流程,该流程会将Edge Delivery Services块连接到AEM Edge函数端点,该端点调用第三方API并将动态数据返回到块。
为了演示目的,Frescopa站点项目用作Edge Delivery Services站点。 您开发了 预计的交付检查器 块,该块将调用AEM Edge函数以检查产品可用性和交付时间。 此块在通用编辑器中创作,而AEM Edge函数端点是在单独的项目中开发的。 该块调用端点,该端点调用两个上游API(在本教程中模拟)并返回对块的组合响应。
您可以按照与满足自己Edge Delivery Services网站中的动态数据需求相同的步骤,在自己所在的块中交换和AEM Edge函数代码。
高级步骤包括:
- 开发AEM Edge函数:实现一个处理程序,该处理程序将两个上游调用合并为一个响应,为本地开发启用CORS,并在本地测试端点。
- 开发Edge Delivery Services块:为块的JSON模型、JavaScript和CSS提供基架,并在通用编辑器中创作它。
- 将块连接到AEM Edge函数:从块中调用AEM Edge函数的本地端点,在部署后切换到相对路径,并处理加载和错误状态。
- 部署和验证:合并代码,部署AEM Edge函数并发布Edge Delivery Services站点页面,并确认该块从站点域上部署的端点渲染实时数据。
先决条件
要完成本教程,请确保您已完成以下操作:
- 在Edge Delivery Services上设置AEM Edge Functions:在本地克隆了一个AEM Edge Functions项目,该项目安装了Adobe CLI,并且运行了用于AEM Edge Function开发的本地开发服务器。
- Edge Delivery Services和Universal Editor开发人员教程:熟悉创建块和创作块概念,以及为Edge Delivery Services站点块开发运行的本地开发服务器。
本地开发和已部署
在开发之前,了解本地开发和部署环境之间的差异非常重要。 下表总结了二者的差异:
http://127.0.0.1:7676/api/frescopa/estimated-delivery/api/frescopa/estimated-deliverycdn.yaml)将路径转发到AEM Edge函数实例aio aem edge-functions serve在本地运行CORS处理
让我们看一下CORS如何处理本地开发和部署环境之间的差异。
- 本地开发: Edge Delivery Services本地开发服务器在端口3000上运行,AEM Edge函数的本地开发服务器在端口7676上运行。 由于有两个不同的源和端口,因此AEM Edge函数必须返回CORS标头,否则浏览器会阻止响应。
- 已部署:部署后,CDN会将相对路径路由到与站点位于同一域中的AEM Edge函数,因此在该域中无需CORS处理。
您可以在AEM Edge函数处理程序中实施CORS标头。 然后,块的JavaScript会根据环境选取相对路径或绝对路径。
参考实施
一个完整的工作示例介绍了本教程中的每个步骤。 使用以下差异可对照它检查您自己的实施,或者直接跳转到代码而不执行每个步骤。
- AEM Edge函数更改:路由、处理程序、上游调用模拟和CORS帮助程序相对于样板的
main分支的完整差异。 - Edge Delivery Services块更改:块的JSON模型、JavaScript和CSS的完整差异,相对于Frescopa网站的
main分支。 - 实时预览:在Frescopa演示网站上以端到端方式运行的预计投放检查器块,其中部署了AEM Edge函数并响应实时请求。
后续步骤
从开始,开发AEM Edge函数,因为Edge Delivery Services块在连接任何内容之前需要调用端点。