[Alpha]{class="badge informative"}
플랫폼 서비스
Server SDK은 웹 SDK과 핵심 논리를 공유합니다. 네트워크 요청 전송, 쿠키 읽기 또는 데이터 저장과 같이 환경에 따라 달라지는 모든 작업은 플랫폼 서비스 집합을 통해 수행됩니다. SDK에는 웹 표준 API만 사용하는 기본 서비스가 포함되어 있으므로 요구 사항을 충족하는 모든 런타임에서 작동합니다. 이러한 모든 항목을 자체 구현으로 바꿀 수 있습니다.
대부분의 구현은 서비스를 대체할 필요가 없습니다. 하나를 바꾸는 가장 일반적인 이유는 cookie 서비스를 제공하여 방문자가 요청 간에 동일한 ID 및 동의를 유지하도록 하기 위한 것입니다.
서비스 전달 위치 where
다음 두 위치에서 서비스를 전달할 수 있습니다.
createInstance(또는createCustomInstance):platformServices속성이 있는 개체를 전달합니다. 서비스는 최상위 인스턴스에 적용됩니다.forRequest이(가) 만든 핸들은network,runtime,legacy및globals서비스도 재사용하지만,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 함수를 사용합니다.legacyglobals쿠키 서비스 cookie
SDK은 각 방문자의 ID(ECID) 및 동의 환경 설정을 쿠키에 저장합니다. 서버에서 cookie 서비스를 통해 해당 쿠키를 읽고 씁니다. 쿠키 서비스는 다음 메서드를 제공해야 합니다.
get(name)undefined이(가) 없는 경우 이를 반환합니다.getAll()set(name, value, options)remove(name, options)withConverter(converter)기본 쿠키 서비스는 메모리에만 쿠키를 유지합니다.
cookie서비스가 없는forRequest핸들에서 각 요청에 대해 저장소가 비어 있으므로 방문자는 모든 요청에 대해 새 ECID를 받습니다.- 최상위 인스턴스에서는 프로세스 수명 동안 하나의 저장소가 지속되며 해당 인스턴스에 대한 모든 호출에서 공유됩니다.
SDK에는 방문자의 Cookie 요청 헤더를 읽고 Set-Cookie 응답 헤더를 작성하는 쿠키 서비스가 포함되어 있지 않습니다. 요청 간 방문자 ID 및 동의를 유지하려면 자체 구현을 제공하고 각 요청에 대해 forRequest에 새 구현을 전달해야 합니다.
스토리지 서비스 storage
SDK에서는 storage 서비스를 사용하여 디버깅을 setDebug(으)로 설정하는지 여부, 이미 보낸 동의 환경 설정 setConsent 및 Adobe Experience Platform Assurance에서 요청의 유효성을 검사하는 데 사용하는 클라이언트 ID와 같은 몇 가지 값을 기억합니다. 기본 저장소 서비스는 데이터를 메모리에 유지합니다.
각 forRequest 핸들은 사용자가 전달하지 않는 한 비어 있는 새 저장소 서비스를 받습니다. Assurance을 사용하고 방문자의 Assurance 클라이언트 ID가 요청 간에 동일하게 유지되도록 하려면 해당 방문자에 대한 storage 서비스를 forRequest에 전달합니다.
네트워크 서비스 network
기본 네트워크 서비스에서 전역 fetch 함수를 사용하여 요청을 보냅니다. request을(를) forRequest에 전달하면 방문자의 헤더도 각 요청에 추가됩니다. 컨텍스트 및 전달된 헤더를 참조하십시오.
네트워크 서비스를 바꾸려면 서비스 개체 자체를 전달하는 대신 SDK의 로거를 받아서 네트워크 서비스를 반환하는 function을 전달합니다.
const alloy = createInstance({
platformServices: {
network: (logger) => myNetworkService
}
});
forRequest에 전달하는 request에서 방문자의 헤더를 더 이상 전달하지 않습니다. 네트워크 서비스가 보내는 모든 헤더에 대한 책임은 네트워크 서비스에 있습니다.Authorization, x-api-key 및 x-gw-ims-org-id 헤더를 포함하는 headers 개체로 서비스의 sendFetchRequest(url, body, headers) 메서드를 호출합니다. 항상 이러한 헤더를 보냅니다. 그렇지 않으면 Edge Network에서 sendEvent개의 요청을 거부합니다.