Servir plusieurs points d’entrée avec des fonctions Edge
Une seule fonction AEM Edge peut exposer de nombreux points d’entrée HTTP. Les exemples dans Créer un point d’entrée API affichent déjà deux points d’entrée (/status et /my-api) sur une seule fonction JavaScript. Vous ne déployez pas de fonction distincte pour chaque point d’entrée mais ajoutez simplement la logique de correspondance de point d’entrée à la même fonction.
Point clé
edgeFunctions.yamlmy-edge-functioncdn.yamledgefunction-my-edge-function), mais chaque règle a sa propre règle de correspondance de chemin d’accèsindex.jsif par point d’entrée et le corps de l’instruction ont leur propre logique de gestionnaireComment ajouter un autre point d’entrée
Pour exposer un nouveau point d’entrée tel que /api/items :
- Ajoutez la logique de correspondance de point d’entrée dans
src/index.js. - Créez et déployez la fonction AEM Edge.
- Ajoutez une règle de sélecteur d’origine en
config/cdn.yamlpour le point d’entrée . - Déployer la configuration du réseau CDN
Comment organiser la logique du gestionnaire
Gardez les index.js concentrés sur la correspondance des points d’entrée. Déplacez la logique de gestionnaire dans des fichiers distincts à mesure que l’API se développe.
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
Correspondance sur la méthode ou le préfixe de chemin
La correspondance des points d’entrée est en JavaScript brut. Vous ne vous limitez pas à l’égalité exacte des chemins.
Méthode HTTP : gérez les GET et les POST sur le même chemin avec des instructions if distinctes.
if (url.pathname === "/api/items" && req.method === "GET") {
return await listItems(req);
}
if (url.pathname === "/api/items" && req.method === "POST") {
return await createItem(req);
}
Préfixe de chemin d’accès : regroupez les points d’entrée associés sous un préfixe partagé, puis distribuez-les à un gestionnaire à l’intérieur d’un module de routeur.
// 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 };
Gardez les routeurs de préfixe superficiels, c’est-à-dire un niveau de préfixe qui distribue directement à un gestionnaire. Si un préfixe devient volumineux, divisez-le en préfixes distincts avec leurs propres règles de sélecteur d’origine (par exemple, /api/catalog/ et /api/checkout/) au lieu d’imbriquer les routeurs sous un seul préfixe.
Autres exemples de code
La norme standard Fonctions AEM Edge fournit plusieurs points d’entrée dans une seule fonction :