[Alpha]{class="badge informative"}

プラットフォームサービス

Server SDKは、Web SDKとコアロジックを共有しています。 ネットワーク要求の送信、Cookieの読み取り、データの保存など、環境に依存するものは、一連の​ プラットフォームサービス ​を経由します。 SDKには、web標準のAPIのみを使用するデフォルトサービスが含まれているため、要件を満たす任意のランタイムで動作します。 独自の実装で置き換えることができます。

ほとんどの実装では、サービスを置き換える必要はありません。 1つを置き換える最も一般的な理由は、訪問者がリクエスト間で同じIDと同意を維持できるように、cookie サービスを提供することです。

サービスを渡す場所 where

次の2つの場所でサービスを渡すことができます。

  • createInstance (またはcreateCustomInstance): platformServices プロパティを持つオブジェクトを渡します。 サービスはトップレベルインスタンスに適用されます。 forRequestによって作成されたハンドルは、訪問者データを保持しているため、network、runtime、legacy、globals サービスも再利用しますが、not、cookieおよびstorage サービスも再利用します。
  • forRequest: requestの横にあるforRequest オブジェクトにサービスを直接渡します。 これらのサービスは、そのハンドルにのみ適用され、createInstanceに渡されたサービスよりも優先されます。
import { createInstance } from "@adobe/alloy-node";

// Applies to the top-level instance. Handles reuse network, runtime, legacy, and globals.
const alloy = createInstance({
  platformServices: {
    runtime: myRuntimeService
  }
});

await alloy.configure({
  datastreamId: "ebebf826-a01f-4458-8cec-ef61de241c93",
  orgId: "ADB3LETTERSANDNUMBERS@AdobeOrg",
  edgeCredentials: {
    clientId: process.env.ADOBE_CLIENT_ID,
    clientSecret: process.env.ADOBE_CLIENT_SECRET,
    scopes: process.env.ADOBE_SCOPES.split(",")
  }
});

// Applies only to this handle
const visitor = alloy.forRequest({
  request: req,
  cookie: myCookieServiceForThisVisitor,
  storage: myStorageServiceForThisVisitor
});

各サービスのインターフェイスは、GitHubのadobe/alloy リポジトリのpackages/core/src/services/types.tsで定義されています。 サービスを置き換える場合、実装はインターフェイス内のすべてのメソッドを提供する必要があります。

利用可能なサービス services

サービス
デフォルトの動作
createInstanceに渡されたスコープ
cookie
メモリにCookieを保存します。
トップレベルインスタンスのみ
storage
データをメモリに保存します。
トップレベルインスタンスのみ
network
グローバル fetch関数を使用してリクエストを送信し、訪問者のヘッダーを転送します。
トップレベルのインスタンスとすべてのハンドル
runtime
グローバル setTimeout、clearTimeout、atob、btoa、TextEncoder、TextDecoderおよびDate.now関数を使用します。
トップレベルのインスタンスとすべてのハンドル
legacy
何もしません。 ブラウザーでは、このサービスは、サーバーに存在しない従来の訪問者ID サービスライブラリに接続します。
トップレベルのインスタンスとすべてのハンドル
globals
空の値を返します。 ブラウザーでは、このサービスはページ URLなどのページの詳細を読み取ります。
トップレベルのインスタンスとすべてのハンドル

SDKは、各訪問者のID (ECID)と同意設定をCookieに保存します。 サーバー上で、cookie サービスを介してそれらのCookieを読み取り、書き込みます。 cookie サービスは、次のメソッドを提供する必要があります。

メソッド
説明
get(name)
名前付きCookieの値を返します。存在しない場合はundefined。
getAll()
すべてのCookie名と値を含むオブジェクトを返します。
set(name, value, options)
Cookieを作成または更新します。
remove(name, options)
Cookieを削除します。
withConverter(converter)
指定されたコンバータで値をエンコードおよびデコードするcookie サービスを返します。

デフォルトのcookie サービスでは、Cookieはメモリ内でのみ保持されます。

  • cookie サービスを持たないforRequest ハンドルでは、リクエストごとにストアが空で開始されるため、訪問者はリクエストごとに新しいECIDを取得します。
  • 最上位のインスタンスでは、1つのストアがプロセスの有効期間を維持し、そのインスタンスで行われたすべての呼び出しによって共有されます。

SDKには、訪問者のCookie リクエストヘッダーを読み取り、Set-Cookie応答ヘッダーを書き込むCookie サービスは含まれていません。 リクエスト全体で訪問者のIDと同意を維持するには、独自の実装を指定し、リクエストごとに新しい実装をforRequestに渡す必要があります。

ストレージサービス storage

SDKは、storage サービスを使用して、デバッグがsetDebugで有効になっているかどうか、どの同意設定setConsentが既に送信されているか、およびAdobe Experience Platform Assuranceがリクエストの検証に使用するクライアント IDなど、いくつかの値を記憶します。 デフォルトのストレージサービスは、データをメモリに保持します。

各forRequest ハンドルは、1つを渡さない限り、新しい空のストレージ サービスを取得します。 Assuranceを使用し、訪問者のAssurance クライアント IDをリクエスト間で同じにしたい場合は、その訪問者のstorage サービスをforRequestに渡します。

ネットワークサービス network

既定のネットワーク サービスは、グローバル fetch関数を使用して要求を送信します。 requestをforRequestに渡すと、訪問者のヘッダーも各リクエストに追加されます。 ​ コンテキストと転送ヘッダーを参照してください。

ネットワークサービスを置き換えるには、サービスオブジェクト自体を渡す代わりに、SDKのロガーを受け取り、ネットワークサービスを返す​ 関数 ​を渡します。

const alloy = createInstance({
  platformServices: {
    network: (logger) => myNetworkService
  }
});
IMPORTANT
ネットワークサービスを置き換えると、SDKはforRequestに渡すrequestから訪問者のヘッダーを転送しなくなります。 ネットワークサービスは、送信するすべてのヘッダーに対して責任があります。
SDKは、サービスのsendFetchRequest(url, body, headers) メソッドを、認証済みリクエストのAuthorization、x-api-key、およびx-gw-ims-org-id ヘッダーを含むheaders オブジェクトで呼び出します。 常にヘッダーを送信する。 それ以外の場合、Edge NetworkはsendEvent件のリクエストを拒否します。
recommendation-more-help
experience-platform-help-collection