Edge Functionsで複数のエンドポイントを提供する

IMPORTANT
AEM Edge Functionsは現在ベータ版です。 機能やドキュメントは変更される可能性があります。 フィードバックについては、aemcs-edgecompute-feedback@adobe.comまでお問い合わせください。

1つのAEM Edge関数で、多くのHTTP エンドポイントを公開できます。 Build an API endpointの例では、1つのJavaScript関数に2つのエンドポイント (/statusおよび/my-api)が既に表示されています。 は、エンドポイントごとに個別の関数をデプロイするのではなく​同じ関数にエンドポイント一致ロジックを追加するだけです。

キーポイント

レイヤー
拡大・縮小
edgeFunctions.yaml
名前を持つ1つの関数宣言(例:my-edge-function
cdn.yaml
エンドポイント ごとに1つのオリジン セレクタールール​があり、すべてのルールが同じ(例:edgefunction-my-edge-function)オリジンを共有していますが、各ルールには独自のパス一致ルールがあります
index.js
エンドポイント ごとに1つのif ステートメント​と、ステートメント本文には独自のハンドラーロジックがあります

別のエンドポイントの追加方法

/api/itemsなどの新しいエンドポイントを公開するには:

  1. src/index.jsにエンドポイント一致ロジックを追加します。
  2. AEM Edge関数をビルドしてデプロイします。
  3. エンドポイントのconfig/cdn.yamlにオリジン セレクタールールを追加します。
  4. CDN設定のデプロイ

ハンドラーロジックの整理

エンドポイントの一致にindex.jsを集中させておきます。 APIの成長に合わせて、ハンドラーロジックを個別のファイルに移動します。

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

メソッドまたはパスのプレフィックスに一致

エンドポイントマッチングはプレーンJavaScriptです。 あなたは正確なパスの平等に限定されません。

HTTP メソッド:​同じパスのGETPOSTを個別のif ステートメントで処理します。

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

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

パス プレフィックス:​共有プレフィックスの下に関連エンドポイントをグループ化し、ルーターモジュール内のハンドラーにディスパッチします。

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

プレフィックスルーターを浅く保つ。つまり、ハンドラーに直接ディスパッチするプレフィックスレベルを1つ保持します。 プレフィックスが大きくなった場合は、1つのプレフィックスの下にルーターをネストするのではなく、独自のオリジン セレクタ ルール(/api/catalog//api/checkout/など)を持つ個別のプレフィックスに分割します。

その他のコード例

AEM Edge Functions ボイラープレート ​には、1つの関数に複数のエンドポイントが含まれています。

ファイル
What it shows
Endpoint matching
src/index.js
1つのフェッチ イベント ハンドラー内の複数のパス
CDN ルール
config/cdn.yaml
エンドポイントごとに1つのオリジン セレクタールール
ハンドラーモジュール
src/weather.js
index.jsからロジックが抽出されました

その他のリソース

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