Servir plusieurs points d’entrée avec des fonctions Edge

IMPORTANT
AEM Edge Functions est actuellement en version bêta. Les fonctionnalités et la documentation peuvent changer. Pour tout commentaire, contactez 🔗.

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é

Calque
Quelles échelles
edgeFunctions.yaml
Une déclaration de fonction avec un nom, par exemple my-edge-function
cdn.yaml
Une règle de sélecteur d’origine par point d’entrée, toutes les règles partagent la même origine (par exemple, edgefunction-my-edge-function), mais chaque règle a sa propre règle de correspondance de chemin d’accès
index.js
Une instruction if par point d’entrée et le corps de l’instruction ont leur propre logique de gestionnaire

Comment ajouter un autre point d’entrée

Pour exposer un nouveau point d’entrée tel que /api/items :

  1. Ajoutez la logique de correspondance de point d’entrée dans src/index.js.
  2. Créez et déployez la fonction AEM Edge.
  3. Ajoutez une règle de sélecteur d’origine en config/cdn.yaml pour le point d’entrée .
  4. 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 :

Exemple
Fichier
Ce qu’il montre
Correspondance des points d’entrée
src/index.js
Plusieurs chemins dans un gestionnaire d’événements de récupération
Règles du réseau CDN
config/cdn.yaml
Une règle de sélecteur d’origine par point d’entrée
Module Handler
src/weather.js
Logique extraite de index.js

Ressources supplémentaires

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