Atender a vários endpoints com funções do Edge
Uma função Edge do AEM pode expor muitos pontos de extremidade HTTP. Os exemplos em Criar um ponto de extremidade de API já mostram dois pontos de extremidade (/status e /my-api) em uma única função JavaScript. Você não implanta uma função separada para cada ponto de extremidade, mas apenas adiciona a lógica de correspondência de ponto de extremidade à mesma função.
Ponto principal
edgeFunctions.yamlmy-edge-functioncdn.yamledgefunction-my-edge-function), mas cada regra tem sua própria regra de correspondência de caminhoindex.jsif por ponto de extremidade, e o corpo da instrução tem sua própria lógica de manipuladorComo adicionar outro endpoint
Para expor um novo ponto de extremidade, como /api/items:
- Adicionar lógica de correspondência de ponto de extremidade em
src/index.js. - Crie e implante a Função Edge do AEM.
- Adicione uma regra de seletor de origem em
config/cdn.yamlpara o ponto de extremidade. - Implantar a configuração do CDN
Como organizar a lógica do manipulador
Mantenha index.js focado na correspondência do ponto de extremidade. Mova a lógica do manipulador para arquivos separados à medida que a 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
Correspondência no método ou no prefixo de caminho
A correspondência de endpoint é JavaScript simples. Você não está limitado à igualdade de caminho exata.
Método HTTP: Identificador GET e POST no mesmo caminho com instruções if separadas.
if (url.pathname === "/api/items" && req.method === "GET") {
return await listItems(req);
}
if (url.pathname === "/api/items" && req.method === "POST") {
return await createItem(req);
}
Prefixo de caminho: Agrupa pontos de extremidade relacionados em um prefixo compartilhado e, em seguida, despacha para um manipulador dentro de um módulo de roteador.
// 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 };
Mantenha os roteadores de prefixo superficiais, o que significa um nível de prefixo que é enviado diretamente para um manipulador. Se um prefixo aumentar, divida-o em prefixos separados com suas próprias regras de seleção de origem (por exemplo, /api/catalog/ e /api/checkout/) em vez de aninhar roteadores com um prefixo.
Mais exemplos de código
O modelo das Funções Edge do AEM fornece vários pontos de extremidade em uma única função: