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

Camada
O que pode ser dimensionado
edgeFunctions.yaml
Uma declaração de função com um nome, por exemplo my-edge-function
cdn.yaml
Uma regra de seletor de origem por ponto de extremidade, todas as regras compartilham a mesma origem (por exemplo, edgefunction-my-edge-function), mas cada regra tem sua própria regra de correspondência de caminho
index.js
Uma instrução if por ponto de extremidade, e o corpo da instrução tem sua própria lógica de manipulador

Como adicionar outro endpoint

Para expor um novo ponto de extremidade, como /api/items:

  1. Adicionar lógica de correspondência de ponto de extremidade em src/index.js.
  2. Crie e implante a Função Edge do AEM.
  3. Adicione uma regra de seletor de origem em config/cdn.yaml para o ponto de extremidade.
  4. 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:

Exemplo
Arquivo
O que ele mostra
Correspondência de ponto de extremidade
src/index.js
Vários caminhos em um manipulador de eventos de busca
Regras CDN
config/cdn.yaml
Uma regra do seletor de origem por endpoint
Módulo do manipulador
src/weather.js
Lógica extraída de index.js

Recursos adicionais

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