[Alpha]{class="badge informative"}
Serviços de plataforma
O Server SDK compartilha sua lógica principal com a Web SDK. Tudo o que depende do ambiente, como o envio de solicitações de rede, a leitura de cookies ou o armazenamento de dados, passa por um conjunto de serviços de plataforma. O SDK inclui serviços padrão que usam apenas APIs padrão da Web, para que funcionem em qualquer tempo de execução que atenda aos requisitos. Você pode substituir qualquer um deles com sua própria implementação.
A maioria das implementações não precisa substituir nenhum serviço. O motivo mais comum para substituir um é fornecer um serviço do cookie, para que um visitante mantenha a mesma identidade e consentimento em todas as solicitações.
Onde passar os serviços where
Você pode passar serviços em dois lugares:
createInstance(oucreateCustomInstance): passar um objeto com uma propriedadeplatformServices. Os serviços se aplicam à instância de nível superior. Os identificadores criados porforRequesttambém reutilizam os serviçosnetwork,runtime,legacyeglobals, mas não os serviçoscookieestorage, pois eles contêm dados de visitantes.forRequest: Passe os serviços diretamente no objetoforRequest, próximo arequest. Estes serviços se aplicam somente a este identificador e têm prioridade sobre os serviços passados paracreateInstance.
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
});
As interfaces para cada serviço estão definidas em packages/core/src/services/types.ts no repositório adobe/alloy no GitHub. Ao substituir um serviço, sua implementação deve fornecer todos os métodos na interface.
Serviços disponíveis services
createInstancefetch e encaminha os cabeçalhos do visitante.runtimesetTimeout, clearTimeout, atob, btoa, TextEncoder, TextDecoder e Date.now.legacyglobalsServiço de cookie cookie
O SDK armazena a identidade (ECID) e as preferências de consentimento de cada visitante em cookies. Em um servidor, ele lê e grava esses cookies por meio do serviço cookie. O serviço de cookie deve fornecer os seguintes métodos:
get(name)undefined se ele não existir.getAll()set(name, value, options)remove(name, options)withConverter(converter)O serviço de cookie padrão mantém os cookies somente na memória:
- Em um identificador
forRequestsem um serviçocookie, o armazenamento começa vazio para cada solicitação, para que o visitante receba uma nova ECID em cada solicitação. - Na instância de nível superior, uma loja dura a vida do processo e é compartilhada por cada chamada feita nessa instância.
A SDK não inclui um serviço de cookie que lê o cabeçalho de solicitação Cookie do visitante e grava cabeçalhos de resposta Set-Cookie. Para manter a identidade e o consentimento de um visitante em todas as solicitações, você deve fornecer sua própria implementação e passar uma nova para forRequest para cada solicitação.
Serviço de armazenamento storage
O SDK usa o serviço storage para lembrar alguns valores, como se a depuração está ativada com setDebug, quais preferências de consentimento setConsent já foram enviadas e a ID do cliente que o Adobe Experience Platform Assurance usa para validar solicitações. O serviço de armazenamento padrão mantém os dados na memória.
Cada identificador forRequest recebe um serviço de armazenamento novo e vazio, a menos que você passe um. Se você usa o Assurance e deseja que a ID de cliente Assurance de um visitante permaneça a mesma em todas as solicitações, passe um serviço storage para esse visitante para forRequest.
Serviço de rede network
O serviço de rede padrão envia solicitações com a função global fetch. Quando você passa um request para forRequest, ele também adiciona os cabeçalhos do visitante a cada solicitação. Consulte Contexto e cabeçalhos encaminhados.
Para substituir o serviço de rede, passe uma função que receba o agente de log da SDK e retorne um serviço de rede, em vez de passar o próprio objeto de serviço:
const alloy = createInstance({
platformServices: {
network: (logger) => myNetworkService
}
});
request que você passar para forRequest. O serviço de rede é responsável por todos os cabeçalhos enviados.sendFetchRequest(url, body, headers) do seu serviço com um objeto headers que contém os cabeçalhos Authorization, x-api-key e x-gw-ims-org-id para solicitações autenticadas. Sempre envie esses cabeçalhos. Caso contrário, o Edge Network rejeita sendEvent solicitações.