使用Edge函数为多个端点提供服务
IMPORTANT
AEM Edge函数当前为测试版。 功能和文档可能会更改。 如需反馈,请联系aemcs-edgecompute-feedback@adobe.com。
一个AEM Edge函数可以公开多个HTTP端点。 生成API终结点中的示例已在单个JavaScript函数上显示两个终结点(/status和/my-api)。 您 不是为每个终结点 部署单独的函数,而是向同一函数添加终结点匹配逻辑。
要点
图层
什么比例
edgeFunctions.yaml一个名称为的函数声明,例如
my-edge-functioncdn.yaml每个端点有一个源选择器规则,所有规则共享相同的(例如,
edgefunction-my-edge-function)源,但每个规则都有自己的路径匹配规则index.js每个终结点有一个
if语句,并且语句正文有自己的处理程序逻辑如何添加另一个端点
要公开新终结点,如/api/items,请执行以下操作:
- 在
src/index.js中添加终结点匹配逻辑。 - 构建和部署AEM Edge功能。
- 在
config/cdn.yaml中为终结点添加起源选择器规则。 - 部署CDN配置
如何组织处理程序逻辑
将index.js的焦点放在终结点匹配上。 在API增长时将处理程序逻辑移动到单独的文件中。
src/
├── index.js # fetch event handler and endpoint matching
├── my-api.js # handler for /my-api
├── items.js # handler for /api/items
└── lib/
└── response.js # shared 404 and 500 helpers
匹配方法或路径前缀
端点匹配是纯JavaScript。 不限于路径完全相等。
HTTP方法:处理GET和POST,位于同一路径上,具有单独的if语句。
if (url.pathname === "/api/items" && req.method === "GET") {
return await listItems(req);
}
if (url.pathname === "/api/items" && req.method === "POST") {
return await createItem(req);
}
路径前缀:将相关端点分组到一个共享前缀下,然后调度到路由器模块内的处理程序。
// src/index.js
if (url.pathname.startsWith("/api/")) {
return await apiRouter(req, url);
}
// src/api-router.js
async function apiRouter(req, url) {
// match the segment after the shared /api/ prefix
switch (url.pathname) {
case "/api/items":
return await itemsHandler(req);
case "/api/orders":
return await ordersHandler(req);
default:
return new Response("Not found", { status: 404 });
}
}
export { apiRouter };
使前缀路由器保持简略,即一个前缀级别直接调度到处理程序。 如果前缀增大,请将其拆分为单独的前缀,并使用它们自己的原始选择器规则(例如,/api/catalog/和/api/checkout/),而不是在一个前缀下嵌套路由器。
experience-manager-learn-help-cloud-service