Distribuire più endpoint con le funzioni Edge

IMPORTANT
AEM Edge Functions è attualmente in versione beta. Le funzioni e la documentazione potrebbero cambiare. Per ricevere commenti, contattare aemcs-edgecompute-feedback@adobe.com.

Una funzione Edge di AEM può esporre molti endpoint HTTP. Gli esempi in Generare un endpoint API mostrano già due endpoint (/status e /my-api) in una singola funzione JavaScript. non distribuisci una funzione separata per ogni endpoint, ma aggiungi semplicemente la logica di corrispondenza dell’endpoint alla stessa funzione.

Punto chiave

Layer
Cosa viene ridimensionato
edgeFunctions.yaml
Una dichiarazione di funzione con un nome, ad esempio my-edge-function
cdn.yaml
Una regola del selettore di origine per endpoint, tutte le regole condividono la stessa origine (ad esempio, edgefunction-my-edge-function), ma ogni regola ha una propria regola di corrispondenza del percorso
index.js
Un’istruzione if per endpoint e il corpo dell’istruzione ha una propria logica di gestore

Come aggiungere un altro endpoint

Per esporre un nuovo endpoint, ad esempio /api/items:

  1. Aggiungi endpoint corrispondente alla logica in src/index.js.
  2. Crea e implementa la funzione Edge di AEM.
  3. Aggiungere una regola del selettore di origine in config/cdn.yaml per l’endpoint.
  4. Distribuire la configurazione CDN

Organizzare la logica del gestore

Mantieni index.js concentrato sulla corrispondenza dell’endpoint. Sposta la logica dell’handler in file separati man mano che l’API cresce.

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

Corrispondenza con prefisso di metodo o percorso

La corrispondenza dell’endpoint è un semplice JavaScript. Non sei limitato all’uguaglianza esatta dei percorsi.

Metodo HTTP: Gestire GET e POST nello stesso percorso con istruzioni if separate.

if (url.pathname === "/api/items" && req.method === "GET") {
  return await listItems(req);
}

if (url.pathname === "/api/items" && req.method === "POST") {
  return await createItem(req);
}

Prefisso percorso: Raggruppa endpoint correlati in un prefisso condiviso, quindi invia a un gestore all’interno di un modulo router.

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

Mantieni i router di prefissi superficiali, ovvero un livello di prefisso che viene inviato direttamente a un gestore. Se un prefisso diventa più grande, dividerlo in prefissi separati con le proprie regole del selettore di origine (ad esempio, /api/catalog/ e /api/checkout/) invece di nidificare i router sotto un unico prefisso.

Altri esempi di codice

La piattaforma di espansione delle funzioni Edge di AEM invia più endpoint in una funzione:

Esempio
File
Cosa mostra
Corrispondenza endpoint
src/index.js
Diversi percorsi in un unico gestore eventi di recupero
Regole CDN
config/cdn.yaml
Una regola del selettore di origine per endpoint
Modulo gestore
src/weather.js
Logica estratta da index.js

Risorse aggiuntive

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