[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 (ou createCustomInstance): passar um objeto com uma propriedade platformServices. Os serviços se aplicam à instância de nível superior. Os identificadores criados por forRequest também reutilizam os serviços network, runtime, legacy e globals, mas não os serviços cookie e storage, pois eles contêm dados de visitantes.
  • forRequest: Passe os serviços diretamente no objeto forRequest, próximo a request. Estes serviços se aplicam somente a este identificador e têm prioridade sobre os serviços passados para 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
});

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

Serviço
Comportamento padrão
Escopo quando passado para createInstance
cookie
Armazena cookies na memória.
Somente instância de nível superior
storage
Armazena dados na memória.
Somente instância de nível superior
network
Envia solicitações com a função global fetch e encaminha os cabeçalhos do visitante.
Instância de nível superior e cada identificador
runtime
Usa as funções globais setTimeout, clearTimeout, atob, btoa, TextEncoder, TextDecoder e Date.now.
Instância de nível superior e cada identificador
legacy
Não faz nada. Em um navegador, esse serviço se conecta à biblioteca herdada do Serviço de ID do visitante, que não existe em um servidor.
Instância de nível superior e cada identificador
globals
Retorna valores vazios. Em um navegador, esse serviço lê os detalhes da página, como o URL da página.
Instância de nível superior e cada identificador

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:

Método
Descrição
get(name)
Retorna o valor do cookie nomeado, ou undefined se ele não existir.
getAll()
Retorna um objeto que contém cada nome e valor de cookie.
set(name, value, options)
Cria ou atualiza um cookie
remove(name, options)
Exclui um cookie.
withConverter(converter)
Retorna um serviço de cookie que codifica e decodifica valores com o conversor especificado.

O serviço de cookie padrão mantém os cookies somente na memória:

  • Em um identificador forRequest sem um serviço cookie, 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
  }
});
IMPORTANT
Se você substituir o serviço de rede, o SDK não encaminhará mais os cabeçalhos do visitante do request que você passar para forRequest. O serviço de rede é responsável por todos os cabeçalhos enviados.
A SDK chama o método 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.
recommendation-more-help
experience-platform-help-collection