Article

2min lecture

Comment nous avons adopté OpenFeature pour rendre notre SDK AB Tasty Feature Experimentation encore plus ouvert

Contexte : pourquoi nous avons adopté OpenFeature

Chez AB Tasty, nous sommes convaincus qu’une expérience produit de qualité passe par une intégration fluide de la personnalisation et du feature flagging. Notre SDK AB Tasty Feature Experimentation permet aux équipes tech de contrôler finement l’activation de leurs fonctionnalités et d’adapter leurs interfaces à chaque visiteur.Mais dans un contexte où les écosystèmes techniques se complexifient, il devient crucial de favoriser l’interopérabilité et la flexibilité. C’est là que l’adoption d’OpenFeature prend tout son sens.

OpenFeature : un standard ouvert pour le feature flagging

OpenFeature est une spécification open-source qui fournit une API agnostique pour gérer des feature flags. Elle permet aux développeurs d’intégrer des fonctionnalités de feature flagging de manière cohérente, quel que soit l’outil ou la plateforme utilisée.

Pourquoi c’est utile ?

  • Interopérabilité : une interface de développement (API) unique pour tous les fournisseurs.
  • Évitement du verrouillage fournisseur : changez d’outil sans réécrire votre logique métier.
  • Communauté active : incubé par la CNCF, au cœur des pratiques modernes cloud-native.

Comment ça marche ?

OpenFeature fonctionne avec des providers, qui traduisent ses appels standardisés en appels spécifiques à chaque fournisseur.


👉 C’est exactement ce que nous avons développé pour AB Tasty Feature Experimentation.

Ce que nous avons fait : un provider OpenFeature pour AB Tasty Feature Experimentation

Notre objectif : rendre notre SDK compatible OpenFeature tout en conservant nos fonctionnalités avancées.Nous avons donc développé un provider officiel :
@flagship.io/openfeature-provider-js

Exemple d’intégration (Node.js)


JavaScript
const express = require("express");
const { ABTastyProvider } = require("@flagship.io/openfeature-provider-js");
const { OpenFeature } = require("@openfeature/server-sdk");

const app = express();
app.use(express.json());

const provider = new ABTastyProvider("<ENV_ID>", "<API_KEY>");
await OpenFeature.setProviderAndWait(provider);

app.get("/item", async (req, res) => {
  const evaluationContext = {
    targetingKey: "visitor-id",
    fs_is_vip: true,
  };

  OpenFeature.setContext(evaluationContext);
  const client = OpenFeature.getClient();

  const fsEnableDiscount = await client.getBooleanValue("fs_enable_discount", false, evaluationContext);
  const fsAddToCartBtnColor = await client.getStringValue("fs_add_to_cart_btn_color", "blue", evaluationContext);

  res.json({
    product: {
      name: "AB Tasty Feature Experimentation T-shirt",
      price: 20,
      discountEnabled: fsEnableDiscount,
      btnColor: fsAddToCartBtnColor,
    },
  });
});

app.listen(3000, () => console.log("Server running on port 3000"));

Zoom technique : intégrer Flagship via OpenFeature

1. Installation des dépendances


Shell
npm install @openfeature/server-sdk
npm install @flagship.io/openfeature-provider-js

2. Initialisation du provider


JavaScript
const { ABTastyProvider } = require("@flagship.io/openfeature-provider-js");
const { OpenFeature } = require("@openfeature/server-sdk");

const provider = new ABTastyProvider("<ENV_ID>", "<API_KEY>");
await OpenFeature.setProviderAndWait(provider);

3. Définition du contexte d’évaluation


JavaScript
const evaluationContext = {
  targetingKey: "visitor-id",
  fs_is_vip: true,
};

OpenFeature.setContext(evaluationContext);

4. Évaluation des flags


JavaScript
const client = OpenFeature.getClient();

const fsEnableDiscount = await client.getBooleanValue(
  "fs_enable_discount",
  false,
  evaluationContext
);

const fsAddToCartBtnColor = await client.getStringValue(
  "fs_add_to_cart_btn_color",
  "blue",
  evaluationContext
);

5. Exemple complet avec Express.js


JavaScript
const express = require("express");
const { ABTastyProvider } = require("@flagship.io/openfeature-provider-js");
const { OpenFeature } = require("@openfeature/server-sdk");

const app = express();
app.use(express.json());

const provider = new ABTastyProvider("<ENV_ID>", "<API_KEY>");
await OpenFeature.setProviderAndWait(provider);

app.get("/item", async (req, res) => {
  const evaluationContext = {
    targetingKey: "visitor-id",
    fs_is_vip: true,
  };

  OpenFeature.setContext(evaluationContext);
  const client = OpenFeature.getClient();

  const fsEnableDiscountValue = await client.getBooleanValue(
    "fs_enable_discount",
    false,
    evaluationContext
  );

  const fsAddToCartBtnColorValue = await client.getStringValue(
    "fs_add_to_cart_btn_color",
    "blue",
    evaluationContext
  );

  res.json({
    item: {
      name: "Flagship T-shirt",
      price: 20,
    },
    fsEnableDiscount: fsEnableDiscountValue,
    fsAddToCartBtnColor: fsAddToCartBtnColorValue,
  });
});

const port = 3000;
app.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

Bonus : détection automatique des flags grâce à notre codebase analyser

Pour encore plus de rapidité, nous mettons à disposition un codebase analyser directement intégré dans notre CLI (incluse dans notre extension VSCode).

Ce qu’il fait :

  • Il scanne la codebase du client.
  • Il détecte automatiquement l’utilisation de solutions concurrentes (comme Optimizely, Kameleoon…).
  • Il repère les flags déjà implémentés via OpenFeature.
  • Il propose une création automatique de ces flags dans notre plateforme Flagship.

Résultat ?

➡️ Vous migrez en quelques clics, sans ressaisie.
➡️ Vous testez notre outil Feature Experimentation sans effort.
➡️ Vous gagnez un temps précieux.

Pourquoi c’est important pour nos clients

En adoptant OpenFeature, nous offrons à nos clients :

  • Une intégration plus rapide dans leurs architectures existantes.
  • Une portabilité accrue de leurs déploiements cloud.
  • Une flexibilité totale dans leurs choix technologiques.

Et surtout, nous réaffirmons notre engagement vers un écosystème ouvert et interopérable.

Ressources utiles pour aller plus loin

Abonnez-vous à
notre Newsletter

bloc Newsletter FR

AB Tasty traite et stocke vos données personnelles pour vous envoyer des communications tel que détaillé dans notre politique de confidentialité ici.