Ce produit n'est pas pris en charge par le site Datadog que vous avez sélectionné. ().
Présentation
Cette page décrit comment instrumenter votre application JavaScript de navigateur avec le SDK Datadog Feature Flags. Les Datadog Feature Flags offrent un moyen unifié de contrôler à distance la disponibilité des fonctionnalités dans votre application, d’expérimenter en toute sécurité et de proposer de nouvelles expériences en toute confiance.
Le SDK Datadog Feature Flags pour JavaScript est basé sur OpenFeature, un standard ouvert pour la gestion des Feature Flags. Ce guide explique comment installer le SDK, configurer le fournisseur Datadog et évaluer les indicateurs dans votre application.
Installation
Installez le fournisseur OpenFeature de Datadog et le SDK Web OpenFeature à l’aide de votre gestionnaire de paquets préféré :
Créez une instance DatadogProvider avec vos identifiants Datadog. Pour la configuration en direct des Feature Flags de navigateur, applicationId, clientToken, site et env sont requis. Pour créer un jeton client, consultez Jetons client.
Les Browser Feature Flags ne sont pas pris en charge pour le site Datadog sélectionné ().
import{DatadogProvider}from'@datadog/openfeature-browser';import{OpenFeature}from'@openfeature/web-sdk';constprovider=newDatadogProvider({// Required
// applicationId is a unique identifier to distinguish multiple frontend applications.
// This should match the app ID you provide to your RUM SDK.
applicationId:'<APPLICATION_ID>',// Required
clientToken:'<CLIENT_TOKEN>',site:'',env:'<ENV_NAME>',});
Définir le contexte d’évaluation
Définissez à qui ou à quoi l’évaluation de l’indicateur s’applique en utilisant un contexte d’évaluation. Le contexte d’évaluation inclut des informations sur l’utilisateur ou la session utilisées pour déterminer quelles variantes d’indicateur doivent être renvoyées. Référencez ces attributs dans vos règles de ciblage pour contrôler qui voit chaque variante.
Datadog Feature Flags nécessite que les attributs du contexte d'évaluation soient des valeurs primitives plates : chaînes de caractères, nombres et booléens. Ne transmettez pas d'objets ou de tableaux imbriqués ; ils ne sont pas pris en charge et peuvent entraîner la perte des données d'exposition.
Le targetingKey est utilisé comme sujet de randomisation pour le ciblage basé sur le pourcentage. Lorsqu'un indicateur cible un pourcentage de sujets (par exemple, 50 %), le targetingKey détermine dans quel « compartiment » un utilisateur se trouve. Les utilisateurs ayant le même targetingKey reçoivent toujours la même variante pour un indicateur donné.
La plupart des applications exécutent plusieurs tâches asynchrones au démarrage, comme la récupération de données depuis un autre service ou le chargement de la configuration. Cet exemple montre uniquement l’initialisation des Feature Flags. En guise de bonne pratique, lancez toutes vos promesses de démarrage ensemble et attendez-les en groupe (par exemple, avec Promise.all) juste avant que les résultats ne soient nécessaires, plutôt que d’attendre chacune d’elles séquentiellement. Cela permet de maintenir le temps de démarrage total proche de celui de la tâche la plus lente au lieu de la somme de toutes les tâches.
Évaluer les Feature Flags
Une fois le fournisseur initialisé, vous pouvez évaluer les flags n’importe où dans votre application. L’évaluation des flags est locale et instantanée : le SDK utilise des données mises en cache localement, donc aucune requête réseau n’est effectuée lors de l’évaluation des flags.
Obtenez un client
Récupérez le client OpenFeature pour évaluer les indicateurs :
constclient=OpenFeature.getClient();
Feature Flags booléens
Utilisez getBooleanValue(key, defaultValue) pour les indicateurs qui repre9sentent des conditions active9/de9sactive9 ou vrai/faux :
Lorsque vous avez besoin de plus que la simple valeur de l’indicateur, utilisez les méthodes de détail. Celles-ci renvoient à la fois la valeur évaluée et les métadonnées expliquant l’évaluation :
constdetails=client.getBooleanDetails('checkout_new',false);console.log(details.value);// Evaluated value (true or false)
console.log(details.variant);// Variant name, if applicable
console.log(details.reason);// Why this value was chosen
console.log(details.errorCode);// Error code, if evaluation failed
Exemple complet
Voici un exemple complet montrant comment configurer et utiliser les Datadog Feature Flags dans une application JavaScript :
import{DatadogProvider}from'@datadog/openfeature-browser';import{OpenFeature}from'@openfeature/web-sdk';// Initialize the Datadog provider
constprovider=newDatadogProvider({applicationId:'<APPLICATION_ID>',clientToken:'<CLIENT_TOKEN>',site:'',env:'<ENV_NAME>',});// Set the evaluation context
constevaluationContext={targetingKey:'user-123',user_id:'123',user_role:'admin',};awaitOpenFeature.setProviderAndWait(provider,evaluationContext);// Get the client and evaluate flags
constclient=OpenFeature.getClient();constshowNewFeature=client.getBooleanValue('new_feature',false);if(showNewFeature){console.log('New feature is enabled!');}
Mettre à jour le contexte d’évaluation
Pour mettre e0 jour le contexte d’e9valuation apre8s l’initialisation (par exemple, lorsqu’un utilisateur se connecte), utilisez OpenFeature.setContext() :
Configurer les options du fournisseur de navigateur
Le fournisseur web prend e9galement en charge ces parame8tres optionnels :
Option
Par défaut
Utilisation
enableExposureLogging
true
Envoyer les événements d’exposition vers l’ingestion d’expositions.
enableFlagEvaluationTracking
true
Envoyer la télémétrie d’évaluation agrégée.
enableRumFeatureFlagTracking
true
Ajouter les évaluations d’indicateurs aux événements RUM lorsque le RUM Browser est disponible. L’activation de cette option peut augmenter le nombre d’événements facturés par RUM.
flagEvaluationTrackingInterval
10000 ms
Intervalle de vidage pour la télémétrie d’évaluation.
initialFlagsConfiguration
{}
Initialiser avec des indicateurs précalculés.
flaggingProxy
non défini
Récupérer les indicateurs via un proxy au lieu de site.
customHeaders
non défini
Ajouter des en-têtes aux requêtes de récupération d’indicateurs.
overwriteRequestHeaders
false
Remplacer les en-têtes de requête par défaut par customHeaders.
Remplacer les indicateurs dans votre navigateur
Pour parcourir les indicateurs de votre organisation et les remplacer localement pendant votre développement, intégrez le wrapper DatadogDevtools dans votre pile de fournisseurs et utilisez l’onglet Feature Flags dans l’extension développeur du SDK Browser Datadog.
Tests
Vous pouvez effectuer des tests sur un environnement de test Datadog dédié avec le DatadogProvider réel, ou le remplacer par le InMemoryProvider d’OpenFeature pour contrôler directement les valeurs des indicateurs dans le code de test. Cette section présente l’approche en mémoire, qui permet de garder les tests hermétiques et hors ligne. InMemoryProvider est exporté directement depuis @openfeature/web-sdk, aucune dépendance supplémentaire n’est donc requise.
Contrairement au SDK côté serveur, le SDK Web évalue les indicateurs de manière synchrone après l’initialisation. Toujours awaitsetProviderAndWait une fois dans beforeEach pour vous assurer que le fournisseur est prêt.
import{beforeEach,afterAll,expect,test}from'vitest';import{OpenFeature,TypedInMemoryProvider}from'@openfeature/web-sdk';constflags={new_checkout_button:{variants:{on:true,off:false},defaultVariant:'on',disabled:false,},ui_theme:{variants:{dark:'dark',light:'light'},defaultVariant:'light',disabled:false,},};beforeEach(async()=>{awaitOpenFeature.setProviderAndWait(newTypedInMemoryProvider(flags));});afterAll(async()=>{awaitOpenFeature.close();});test('new checkout button is enabled by default',()=>{constclient=OpenFeature.getClient();expect(client.getBooleanValue('new_checkout_button',false)).toBe(true);});test('missing flag returns default',()=>{constclient=OpenFeature.getClient();expect(client.getBooleanValue('does-not-exist',false)).toBe(false);});
La structure des indicateurs du SDK Web nécessite variants, defaultVariant et disabled. L’omission de l’un de ces éléments entraîne l’échec de la compilation TypeScript ; au moment de l’exécution, l’évaluation d’une clé de drapeau inconnue renvoie la valeur par défaut fournie. Privilégiez TypedInMemoryProvider à InMemoryProvider , obsolète, pour des configurations d’indicateurs vérifiées par type. Le même modèle de test fonctionne avec Jest + jsdom ; remplacez les importations vitest par @jest/globals et ajoutez jest-environment-jsdom à votre projet.
Lectures complémentaires
Documentation, liens et articles supplémentaires utiles: