[Alpha]{class="badge informative"}
Services Platform
Le SDK du serveur partage sa logique de base avec le SDK Web. Tout ce qui dépend de l’environnement, comme l’envoi de requêtes réseau, la lecture de cookies ou le stockage de données, passe par un ensemble de services de plateforme. Le SDK inclut les services par défaut qui utilisent uniquement des API web standard, afin qu’ils fonctionnent dans n’importe quel environnement d’exécution répondant aux exigences . Vous pouvez remplacer n’importe lequel d’entre eux par votre propre mise en œuvre.
La plupart des implémentations n’ont pas besoin de remplacer de services. La raison la plus courante de remplacer l’un d’eux est de fournir un service cookie, de sorte qu’un visiteur conserve la même identité et le même consentement pour toutes les demandes.
Emplacement des services where
Vous pouvez transmettre des services à deux endroits :
createInstance(oucreateCustomInstance) : transmettez un objet avec une propriétéplatformServices. Les services s’appliquent à l’instance de niveau supérieur. Les handles créés parforRequestréutilisent également les servicesnetwork,runtime,legacyetglobals, mais pas les servicescookieetstorage, car ils contiennent des données visiteur.forRequest: transmettez les services directement dans l’objetforRequest, en regard derequest. Ces services s’appliquent uniquement à ce handle et ont la priorité sur les services transmis à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
});
Les interfaces de chaque service sont définies dans packages/core/src/services/types.ts dans le référentiel adobe/alloy sur GitHub. Lorsque vous remplacez un service, votre implémentation doit fournir chaque méthode dans l’interface .
Services disponibles services
createInstancefetch globale et transfère les en-têtes du visiteur.runtimesetTimeout, clearTimeout, atob, btoa, TextEncoder, TextDecoder et Date.now globales.legacyglobalsService de cookies cookie
Le SDK stocke l’identité de chaque visiteur (ECID) et les préférences de consentement dans des cookies. Sur un serveur, il lit et écrit ces cookies par le biais du service cookie. Le service de cookies doit fournir les méthodes suivantes :
get(name)undefined s’il n’existe pas.getAll()set(name, value, options)remove(name, options)withConverter(converter)Le service de cookies par défaut conserve les cookies en mémoire uniquement :
- Sur un handle
forRequestsans servicecookie, le magasin commence vide pour chaque requête, de sorte que le visiteur obtient un nouvel ECID à chaque requête. - Sur l’instance de niveau supérieur, un magasin dure toute la durée du processus et est partagé par chaque appel effectué sur cette instance.
Le SDK n’inclut pas de service de cookie qui lit l’en-tête de requête Cookie du visiteur et écrit Set-Cookie en-têtes de réponse. Pour conserver l’identité et le consentement d’un visiteur ou d’une visiteuse à travers les requêtes, vous devez fournir votre propre mise en œuvre et en transmettre une nouvelle à forRequest pour chaque requête.
Service de stockage storage
Le SDK utilise le service storage pour mémoriser quelques valeurs, par exemple si le débogage est activé avec les setDebug, quelles préférences de consentement setConsent déjà envoyées et l’identifiant client qu’Adobe Experience Platform Assurance utilise pour valider les requêtes. Le service de stockage par défaut conserve les données en mémoire.
Chaque gestionnaire de forRequest reçoit un nouveau service de stockage vide, sauf si vous en transmettez un. Si vous utilisez Assurance et souhaitez que l’identifiant client Assurance d’un visiteur reste le même pour toutes les requêtes, transmettez un service de storage pour ce visiteur à forRequest.
Service réseau network
Le service réseau par défaut envoie les requêtes avec la fonction fetch globale. Lorsque vous transmettez un request à forRequest, il ajoute également les en-têtes du visiteur à chaque requête. Voir En-têtes contextuels et transférés.
Pour remplacer le service réseau, transmettez une fonction qui reçoit l’enregistreur SDK et renvoie un service réseau, au lieu de transmettre l’objet de service lui-même :
const alloy = createInstance({
platformServices: {
network: (logger) => myNetworkService
}
});
request que vous transmettez à forRequest. Votre service réseau est responsable des en-têtes qu’il envoie.sendFetchRequest(url, body, headers) de votre service avec un objet headers qui contient les en-têtes Authorization, x-api-key et x-gw-ims-org-id pour les requêtes authentifiées. Envoyez toujours ces en-têtes. Dans le cas contraire, Edge Network rejette les requêtes sendEvent.