[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に渡されたスコープruntimesetTimeout、clearTimeout、atob、btoa、TextEncoder、TextDecoderおよびDate.now関数を使用します。legacyglobalsCookie サービス cookie
SDKは、各訪問者のID (ECID)と同意設定をCookieに保存します。 サーバー上で、cookie サービスを介してそれらのCookieを読み取り、書き込みます。 cookie サービスは、次のメソッドを提供する必要があります。
get(name)undefined。getAll()set(name, value, options)remove(name, options)withConverter(converter)デフォルトの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
}
});
forRequestに渡すrequestから訪問者のヘッダーを転送しなくなります。 ネットワークサービスは、送信するすべてのヘッダーに対して責任があります。sendFetchRequest(url, body, headers) メソッドを、認証済みリクエストのAuthorization、x-api-key、およびx-gw-ims-org-id ヘッダーを含むheaders オブジェクトで呼び出します。 常にヘッダーを送信する。 それ以外の場合、Edge NetworkはsendEvent件のリクエストを拒否します。