使用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