[Alpha]{class="badge informative"}

Servicios de plataforma

Server SDK comparte su lógica principal con Web SDK. Cualquier cosa que dependa del entorno, como el envío de solicitudes de red, la lectura de cookies o el almacenamiento de datos, pasa por un conjunto de servicios de plataforma. SDK incluye servicios predeterminados que solo usan API estándar en la web, por lo que funcionan en cualquier tiempo de ejecución que cumpla los requisitos. Puede reemplazar cualquiera de ellos con su propia implementación.

La mayoría de las implementaciones no necesitan reemplazar ningún servicio. El motivo más común para reemplazar una es proporcionar un servicio de cookie, de modo que un visitante conserve la misma identidad y consentimiento en todas las solicitudes.

Dónde pasar los servicios where

Puede pasar servicios en dos lugares:

  • createInstance (o createCustomInstance): pasar un objeto con una propiedad platformServices. Los servicios se aplican a la instancia de nivel superior. Los identificadores creados por forRequest también reutilizan los servicios network, runtime, legacy y globals, pero no los servicios cookie y storage, porque contienen datos de visitantes.
  • forRequest: pase los servicios directamente en el objeto forRequest, junto a request. Estos servicios se aplican únicamente a ese identificador y tienen prioridad sobre los servicios pasados a 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
});

Las interfaces de cada servicio se definen en packages/core/src/services/types.ts en el repositorio adobe/alloy de GitHub. Al reemplazar un servicio, la implementación debe proporcionar todos los métodos de la interfaz.

Servicios disponibles services

Servicio
Comportamiento predeterminado
Ámbito al pasar a createInstance
cookie
Almacena las cookies en la memoria.
Solo instancia de nivel superior
storage
Almacena datos en la memoria.
Solo instancia de nivel superior
network
Envía solicitudes con la función global fetch y reenvía los encabezados del visitante.
Instancia de nivel superior y cada identificador
runtime
Utiliza las funciones globales setTimeout, clearTimeout, atob, btoa, TextEncoder, TextDecoder y Date.now.
Instancia de nivel superior y cada identificador
legacy
No hace nada. En un explorador, este servicio se conecta a la biblioteca del servicio de ID de visitante de heredado, que no existe en un servidor de.
Instancia de nivel superior y cada identificador
globals
Devuelve valores vacíos. En un explorador, este servicio lee los detalles de la página, como la dirección URL de la página.
Instancia de nivel superior y cada identificador

SDK almacena la identidad de cada visitante (ECID) y las preferencias de consentimiento en cookies. En un servidor, lee y escribe esas cookies a través del servicio cookie. El servicio de cookies debe proporcionar los siguientes métodos:

Método
Descripción
get(name)
Devuelve el valor de la cookie con nombre, o undefined si no existe.
getAll()
Devuelve un objeto que contiene cada nombre y valor de cookie.
set(name, value, options)
Crea o actualiza una cookie.
remove(name, options)
Elimina una cookie.
withConverter(converter)
Devuelve un servicio de cookies que codifica y descodifica valores con el convertidor dado.

El servicio de cookies predeterminado mantiene las cookies solo en la memoria:

  • En un identificador forRequest sin un servicio cookie, el almacén empieza vacío para cada solicitud, de modo que el visitante obtiene un nuevo ECID en cada solicitud.
  • En la instancia de nivel superior, un almacén dura toda la vida del proceso y se comparte mediante cada llamada realizada en esa instancia.

SDK no incluye un servicio de cookies que lea el encabezado de solicitud Cookie del visitante y escriba Set-Cookie encabezados de respuesta. Para conservar la identidad y el consentimiento de un visitante en todas las solicitudes, debe proporcionar su propia implementación y pasar una nueva a forRequest para cada solicitud.

Servicio de almacenamiento storage

SDK usa el servicio storage para recordar algunos valores, como si la depuración está activada con setDebug, qué preferencias de consentimiento setConsent ya se han enviado y el ID de cliente que Adobe Experience Platform Assurance usa para validar solicitudes. El servicio de almacenamiento predeterminado mantiene los datos en la memoria.

Cada identificador de forRequest obtiene un nuevo servicio de almacenamiento vacío a menos que pase uno. Si usa Assurance y desea que el ID de cliente de Assurance de un visitante permanezca igual en todas las solicitudes, pase un servicio storage para ese visitante a forRequest.

Servicio de red network

El servicio de red predeterminado envía solicitudes con la función global fetch. Cuando pasa un(a) request a forRequest, también agrega los encabezados del visitante a cada solicitud. Ver Contexto y encabezados reenviados.

Para reemplazar el servicio de red, pase una función que reciba el registrador de SDK y devuelva un servicio de red, en lugar de pasar el propio objeto de servicio:

const alloy = createInstance({
  platformServices: {
    network: (logger) => myNetworkService
  }
});
IMPORTANT
Si reemplaza el servicio de red, SDK ya no reenvía los encabezados del visitante desde el request que pasa a forRequest. El servicio de red es responsable de los encabezados que envíe.
SDK llama al método sendFetchRequest(url, body, headers) de su servicio con un objeto headers que contiene los encabezados Authorization, x-api-key y x-gw-ims-org-id para las solicitudes autenticadas. Envíe siempre estos encabezados. De lo contrario, Edge Network rechazará sendEvent solicitudes.
recommendation-more-help
experience-platform-help-collection