[Alpha]{class="badge informative"}
Servizi della piattaforma
Il Server SDK condivide la propria logica di base con il Web SDK. Qualsiasi elemento che dipende dall’ambiente, ad esempio l’invio di richieste di rete, la lettura di cookie o l’archiviazione di dati, viene sottoposto a un set di servizi Platform. SDK include servizi predefiniti che utilizzano solo API standard Web, in modo che funzionino in qualsiasi runtime che soddisfi i requisiti. Puoi sostituirli con una tua implementazione.
La maggior parte delle implementazioni non deve sostituire alcun servizio. Il motivo più comune per sostituirne uno è quello di fornire un servizio cookie, in modo che un visitatore mantenga la stessa identità e lo stesso consenso in tutte le richieste.
Dove passare i servizi where
È possibile trasmettere i servizi in due posizioni:
createInstance(ocreateCustomInstance): passa un oggetto con una proprietàplatformServices. I servizi si applicano all’istanza di livello superiore. Gli handle creati daforRequestriutilizzano anche i servizinetwork,runtime,legacyeglobals, ma non i servizicookieestorage, perché contengono i dati dei visitatori.forRequest: passa i servizi direttamente nell’oggettoforRequest, accanto arequest. Questi servizi si applicano solo a tale handle e hanno la priorità rispetto ai servizi passati acreateInstance.
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
});
Le interfacce per ogni servizio sono definite in packages/core/src/services/types.ts nell’archivio adobe/alloy su GitHub. Quando sostituisci un servizio, l’implementazione deve fornire tutti i metodi possibili nell’interfaccia.
Servizi disponibili services
createInstancefetch globale e inoltra le intestazioni del visitatore.runtimesetTimeout, clearTimeout, atob, btoa, TextEncoder, TextDecoder e Date.now.legacyglobalsServizio cookie cookie
SDK memorizza l’identità di ogni visitatore (ECID) e le preferenze di consenso nei cookie. In un server legge e scrive tali cookie tramite il servizio cookie. Il servizio cookie deve fornire i seguenti metodi:
get(name)undefined se non esiste.getAll()set(name, value, options)remove(name, options)withConverter(converter)Il servizio cookie predefinito mantiene i cookie solo in memoria:
- Su un handle
forRequestsenza un serviziocookie, l’archivio inizia vuoto per ogni richiesta, quindi il visitatore ottiene un nuovo ECID su ogni richiesta. - Nell’istanza di livello principale, un archivio dura per la durata del processo ed è condiviso da ogni chiamata effettuata in tale istanza.
SDK non include un servizio cookie che legge l’intestazione della richiesta Cookie del visitatore e scrive Set-Cookie intestazioni di risposta. Per mantenere l’identità e il consenso di un visitatore in tutte le richieste, devi fornire la tua implementazione e trasmetterne una nuova a forRequest per ogni richiesta.
Servizio di archiviazione storage
SDK utilizza il servizio storage per ricordare alcuni valori, ad esempio se il debug è attivato con setDebug, che ha già inviato le preferenze di consenso setConsent, e l’ID client utilizzato da Adobe Experience Platform Assurance per convalidare le richieste. Il servizio di archiviazione predefinito mantiene i dati in memoria.
Ogni handle forRequest ottiene un nuovo servizio di archiviazione vuoto, a meno che non ne venga passato uno. Se usi Assurance e vuoi che l’ID client Assurance di un visitatore resti lo stesso in tutte le richieste, passa un servizio storage per quel visitatore a forRequest.
Servizio di rete network
Il servizio di rete predefinito invia richieste con la funzione globale fetch. Quando si passa un request a forRequest, vengono aggiunte anche le intestazioni del visitatore a ogni richiesta. Vedi Intestazioni contestuali e inoltrate.
Per sostituire il servizio di rete, passare una funzione che riceve il logger di SDK e restituisce un servizio di rete, invece di passare l’oggetto servizio stesso:
const alloy = createInstance({
platformServices: {
network: (logger) => myNetworkService
}
});
request che passi a forRequest. Il servizio di rete è responsabile di tutte le intestazioni che invia.sendFetchRequest(url, body, headers) del servizio con un oggetto headers che contiene le intestazioni Authorization, x-api-key e x-gw-ims-org-id per le richieste autenticate. Invia sempre queste intestazioni. In caso contrario, Edge Network rifiuta sendEvent richieste.