Bereitstellen mehrerer Endpunkte mit Edge-Funktionen

IMPORTANT
AEM Edge Functions befindet sich derzeit in der Beta-Phase. Funktionen und Dokumentation können sich ändern. Wenden Sie sich für Feedback an aemcs-edgecompute-feedback@adobe.com.

Eine AEM Edge-Funktion kann viele HTTP-Endpunkte bereitstellen. Die Beispiele in Erstellen eines APIEndpunkts) zeigen bereits zwei Endpunkte (/status und /my-api) für eine einzelne JavaScript-Funktion. Sie nicht für jeden Endpunkt eine separate Funktion bereitstellen, sondern derselben Funktion einfach eine übereinstimmende Logik für den Endpunkt hinzufügen.

Kernpunkt

Ebene
Welche Skalierung
edgeFunctions.yaml
Eine Funktionsdeklaration mit einem Namen, z. B. my-edge-function
cdn.yaml
Eine Ursprungsauswahlregel pro Endpunkt verwenden alle Regeln denselben Ursprung (z. B. edgefunction-my-edge-function), aber jede Regel verfügt über eine eigene Regel zum Abgleichen des Pfads
index.js
Eine if Anweisung pro Endpunkt und Anweisungstext verfügt über eine eigene Handler-Logik

Hinzufügen eines weiteren Endpunkts

So stellen Sie einen neuen Endpunkt wie /api/items bereit:

  1. Hinzufügen einer Endpunkt-Matching-Logik in src/index.js.
  2. Erstellen und Bereitstellen der AEM Edge-Funktion.
  3. Fügen Sie eine Regel zur Ursprungsauswahl in config/cdn.yaml für den Endpunkt hinzu.
  4. Bereitstellen der CDN-Konfiguration

Organisieren der Handler-Logik

Konzentrieren index.js sich weiterhin auf den Endpunktabgleich. Verschieben Sie die Handler-Logik bei wachsender API in separate Dateien.

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

Übereinstimmung bei Methode oder Pfadpräfix

Endpunktvergleich ist JavaScript. Sie sind nicht auf exakte Pfadgleichheit beschränkt.

HTTP-Methode: Verarbeiten Sie GET und POST auf demselben Pfad mit separaten 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);
}

Pfadpräfix: Gruppieren Sie verwandte Endpunkte unter einem freigegebenen Präfix und senden Sie sie dann an einen Handler innerhalb eines Routermoduls.

// 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 };

Halten Sie die Präfix-Router niedrig, d. h. eine Präfixebene, die direkt an einen Handler gesendet wird. Wenn ein Präfix sehr groß wird, teilen Sie es in separate Präfixe mit eigenen Ursprungsauswahlregeln auf (z. B. /api/catalog/ und /api/checkout/), anstatt Router unter einem Präfix zu verschachteln.

Weitere Code-Beispiele

Das AEM Edge Functions-Textbaustein liefert mehrere Endpunkte in einer Funktion:

Beispiel
Datei
Was angezeigt wird
Endpunktvergleich
src/index.js
Mehrere Pfade in einem Fetch-Ereignishandler
CDN-Regeln
config/cdn.yaml
Eine Urspr-Selektorregel pro Endpunkt
Handler-Modul
src/weather.js
Aus index.js extrahierte Logik

Zusätzliche Ressourcen

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