Atender a vários endpoints com funções do Edge

IMPORTANT
O AEM Edge Functions está atualmente na versão beta. Os recursos e a documentação podem mudar. Para receber comentários, contate aemcs-edgecompute-feedback@adobe.com.

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