Distribuire più endpoint con le funzioni Edge
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
edgeFunctions.yamlmy-edge-functioncdn.yamledgefunction-my-edge-function), ma ogni regola ha una propria regola di corrispondenza del percorsoindex.jsif per endpoint e il corpo dell’istruzione ha una propria logica di gestoreCome aggiungere un altro endpoint
Per esporre un nuovo endpoint, ad esempio /api/items:
- Aggiungi endpoint corrispondente alla logica in
src/index.js. - Crea e implementa la funzione Edge di AEM.
- Aggiungere una regola del selettore di origine in
config/cdn.yamlper l’endpoint. - 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: