使用Edge函式為多個端點服務

IMPORTANT
AEM Edge功能目前仍在測試階段。 功能和檔案可能會變更。 如需意見回饋,請連絡aemcs-edgecompute-feedback@adobe.com

一個AEM Edge函式可以公開許多HTTP端點。 建置API端點中的範例已在單一JavaScript函式上顯示兩個端點(/status/my-api)。 您​ 不會為每個端點 ​部署個別的函式,而只是將符合邏輯的端點新增至相同函式。

關鍵點

圖層
什麼比例
edgeFunctions.yaml
一個名稱為的函式宣告,例如my-edge-function
cdn.yaml
每個端點​有一個來源選擇器規則,所有規則共用相同的(例如edgefunction-my-edge-function)來源,但每個規則都有自己的路徑比對規則
index.js
每個端點​有一個if陳述式,而且陳述式主體有自己的處理常式邏輯

如何新增另一個端點

若要公開新的端點,例如/api/items

  1. src/index.js中新增端點比對邏輯。
  2. 建置和部署AEM Edge函式。
  3. config/cdn.yaml中為端點新增來源選擇器規則。
  4. 部署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方法:​控制代碼GETPOST位於相同路徑上,具有個別的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/),而不是將路由器巢狀內嵌在一個首碼下。

更多程式碼範例

AEM Edge函式樣板在一個函式中出貨了多個端點:

範例
檔案
它顯示的內容
端點比對
src/index.js
一個擷取事件處理常式中的多個路徑
CDN規則
config/cdn.yaml
每個端點一個來源選擇器規則
處理器模組
src/weather.js
index.js擷取的邏輯

其他資源

recommendation-more-help
experience-manager-learn-help-cloud-service