Sébastian Le Merdy

blog about programming

View on GitHub
11 July 2022

Découverte d’OpenFeature et implémentation d’un provider pour Unleash

by Sébastian Le Merdy

La nécessité de créer des standards s’est souvent révélée utile même si des expériences passées (comme JEE par exemple) nous montrent qu’il faut savoir rester raisonnable sur la portée d’une spécification. OpenFeature applique bien ce principe car il s’agit de standardiser les if de nos applications. Tous ceux qui ont pratiqué un peu sérieusement le feature switching savent que c’est plus compliqué que ça et que ça offre une souplesse très avantageuse aux systèmes complexes. Voici le résumé de ce qu’est OpenFeature et comment on met en œuvre un Provider en prenant en exemple Unleash

Feature switch en deux mots

Quand on déploie des applications, on souhaite parfois les rendre souples sur certaines fonctionnalités :

Tous ces cas d’usages se révèlent extrêmement utiles. Pour y parvenir sans réinventer la roue, on peut utiliser des outils ou des plateformes existantes mais aucun standard ouvert n’était pour l’instant défini. C’est ce qu’OpenFeature tente de proposer.

Nous n’en sommes qu’aux prémices mais cela semble intéressant.

Définition d’un Provider pour Unleash

Unleash est la solution que j’utilise au boulot. À priori il n’existe pas encore de Provider OpenFeature pour ce fournisseur.

Voici un repository qui en défini un.

Un Provider est un fournisseur de feature switch qu’on instancie à l’intérieur du client OpenFeature afin d’abstraire les appels de son code au fournisseur tiers. Classique avec un standard : on ne dépend plus que de l’implémentation custom mais bien de la librairie standard.

Voici un exemple d’utilisation possible pour le Provider Unleash :

// Unleash initialization
var unleash = new DefaultUnleash(UnleashConfig.builder()
                                              .appName("seblm-meals")
                                              .instanceId(InetAddress.getLocalHost().getHostName())
                                              .unleashAPI("https://feature-toggle.seblm-meals.net")
                                              .customHttpHeader("Authorization", "s3cr37-k3y==")
                                              .build());

// OpenFeature initialization
var api = OpenFeatureAPI.getInstance();
api.setProvider(new UnleashProvider(unleash));
var client = api.getClient();

// feature switch usage
var shouldDisplayNewMsg = client.getBooleanValue("new-welcome-message", false);
tags: Techno