Servir varios extremos con funciones de Edge

IMPORTANT
Funciones de AEM Edge se encuentra en la versión beta. Las funciones y la documentación pueden cambiar. Para obtener comentarios, comuníquese con aemcs-edgecompute-feedback@adobe.com.

Una función Edge de AEM puede exponer muchos extremos HTTP. Los ejemplos de Generar un extremo de API ya muestran dos extremos (/status y /my-api) en una sola función de JavaScript. Usted no implementa una función independiente para cada extremo, sino que simplemente agrega lógica de coincidencia de extremos a la misma función.

Punto clave

Capa
Qué escalas
edgeFunctions.yaml
Una declaración de función con un nombre, por ejemplo my-edge-function
cdn.yaml
Una regla de selector de origen por extremo, todas las reglas comparten el mismo origen (por ejemplo, edgefunction-my-edge-function), pero cada regla tiene su propia regla de coincidencia de ruta
index.js
Una instrucción por extremo de tipo if y el cuerpo de la instrucción tiene su propia lógica de controlador

Cómo añadir otro punto final

Para exponer un nuevo extremo como /api/items:

  1. Agregar lógica de coincidencia de extremo en src/index.js.
  2. Cree e implemente la función Edge de AEM.
  3. Agregue una regla de selector de origen en config/cdn.yaml para el extremo.
  4. Implementar la configuración de CDN

Cómo organizar la lógica del controlador

Mantenga a index.js centrado en la coincidencia de extremos. Mueva la lógica del controlador a archivos independientes a medida que la API crezca.

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

Coincidencia en el método o prefijo de ruta

La coincidencia de puntos finales es JavaScript sin formato. No está limitado a la igualdad de ruta exacta.

Método HTTP: El identificador GET y POST están en la misma ruta con instrucciones if independientes.

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

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

Prefijo de ruta de acceso: Extremos relacionados con el grupo bajo un prefijo compartido y, a continuación, enviar a un controlador dentro de un módulo de enrutador.

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

Mantener los enrutadores de prefijo superficiales, es decir, un nivel de prefijo que se envía directamente a un controlador. Si un prefijo aumenta de tamaño, divídalo en prefijos separados con sus propias reglas de selector de origen (por ejemplo, /api/catalog/ y /api/checkout/) en lugar de anidar enrutadores bajo un prefijo.

Más ejemplos de código

La plantilla de funciones Edge de AEM envía varios extremos en una función:

Ejemplo
Archivo
Lo que muestra
Coincidencia de extremo
src/index.js
Varias rutas en un controlador de eventos de captura
Reglas de CDN
config/cdn.yaml
Una regla de selector de origen por extremo
Módulo de controlador
src/weather.js
Lógica extraída de index.js

Recursos adicionales

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