Calculez une tranche stable de déploiement progressif
Un déploiement en pourcentage n’est utile que si une même personne reçoit toujours la même décision.
Lancer gratuitement
Ce calculateur transforme l’identifiant stable d’un utilisateur, d’un compte, d’un appareil ou d’un locataire en l’une des 10,000 tranches déterministes, puis la compare au pourcentage demandé. Il renvoie le hash non signé, la tranche en pourcentage lisible et la décision finale d’inclusion. Aucune valeur aléatoire, horloge, requête réseau ou affectation enregistrée n’influence le résultat : des entrées identiques produisent donc toujours la même sortie.
Choisissez un identifiant représentant le sujet du déploiement
Commencez par un identifiant stable, unique au niveau auquel la fonctionnalité doit être attribuée et disponible partout où la décision est prise. Un ID utilisateur convient à une expérience d’interface individuelle, tandis qu’un ID de compte ou de locataire est généralement préférable lorsque tous les membres d’une organisation doivent observer le même comportement. Les identifiants d’appareil peuvent convenir aux expériences anonymes, mais l’effacement du stockage local risque de modifier l’affectation. Le calculateur considère l’identifiant comme un texte exact : la casse, les espaces, la ponctuation et les caractères Unicode participent tous au hash. Normalisez donc les identifiants avant l’appel si plusieurs systèmes sont susceptibles de les représenter différemment. Décidez, par exemple, si les identifiants ressemblant à des adresses électroniques passent en minuscules, si les ID numériques comportent des zéros initiaux et si une portée telle que production ou préproduction fait partie de la valeur. N’utilisez pas une donnée de profil modifiable, comme le nom affiché. Une fois la convention choisie, conservez-la, car toute modification de l’identifiant change également la tranche.
Comprenez le calcul déterministe de la tranche
La capacité encode l’identifiant en UTF-8 et applique l’algorithme de hash FNV-1a sur 32 bits. Le hash non signé est ramené à l’une des 10,000 tranches en points de base, affichée sous forme d’un nombre compris entre 0 et 99.99. Un sujet est inclus lorsque sa tranche est strictement inférieure au pourcentage demandé multiplié par 100. Cette règle de frontière garantit des extrêmes utiles : zéro pour cent n’inclut personne et cent pour cent inclut tout le monde. Elle permet aussi des évolutions de 0.01 point de pourcentage. Puisque le processus n’emploie ni graine aléatoire, ni temps, ni stockage, ni accès réseau, le même identifiant et le même pourcentage donnent toujours la même réponse. Une hausse du pourcentage conserve tous les sujets déjà inclus et ajoute les identifiants des tranches suivantes ; une baisse retire ceux de la partie supérieure. Ce hash convient à une affectation opérationnelle, mais pas à la sécurité cryptographique. Ne considérez pas sa valeur comme secrète et ne l’utilisez ni pour masquer des identifiants ni pour autoriser un accès.
Intégrez prudemment le résultat à votre processus de livraison
Utilisez le booléen d’inclusion comme l’un des critères de livraison de la fonctionnalité, avec des règles d’éligibilité explicites, des contrôles d’environnement et des dérogations d’urgence. Un service classique exclut d’abord les offres ou régions non prises en charge, puis calcule l’affectation en pourcentage pour le public restant. Enregistrez la configuration du déploiement plutôt qu’une affectation aléatoire distincte par utilisateur, puisque le calcul déterministe peut recréer la décision à tout moment. Avant d’élargir l’exposition, comparez les indicateurs techniques et commerciaux des cohortes éligibles et préparez une désactivation globale rapide. Si plusieurs fonctionnalités indépendantes emploient uniquement le même identifiant, l’ordre de leurs tranches sera corrélé ; ajoutez une clé de fonctionnalité stable, par exemple son nom, un séparateur et l’ID utilisateur, lorsque chaque déploiement nécessite son propre public. Conservez cette clé pendant toute la durée du déploiement. Le point d’accès rejette les pourcentages inférieurs à zéro ou supérieurs à cent au lieu de les borner silencieusement, ce qui rend les erreurs de configuration visibles. Chaque appel coûte $0.002 ; la version navigateur exécute le même calcul pur.
Cas d’usage
Échelonner une mise en production
Exposez une nouvelle fonctionnalité à une fraction stable du public éligible, puis augmentez le pourcentage sans réaffecter les personnes déjà incluses.
Garantir la cohérence par locataire
Hachez un identifiant de compte ou de locataire afin que tous les membres d’une organisation reçoivent la même décision.
Auditer la configuration du déploiement
Recalculez la tranche d’un utilisateur signalé afin d’expliquer si un seuil donné devait l’inclure.
Questions fréquentes
Le même identifiant recevra-t-il toujours le même résultat ?
Oui. Un texte d’identifiant et un pourcentage identiques produisent la même sortie, car l’algorithme n’utilise ni hasard, ni date, ni réseau, ni état enregistré.
Que se passe-t-il à zéro et cent pour cent ?
Zéro pour cent n’inclut aucun identifiant, tandis que cent pour cent inclut tous les identifiants valides.
Puis-je élargir un déploiement sans réaffecter les utilisateurs ?
Oui. Le relèvement du seuil conserve toutes les tranches déjà incluses et ajoute celles du nouvel intervalle.
Le hash offre-t-il une sécurité cryptographique ?
Non. FNV-1a est un hash rapide de distribution déterministe. Il ne doit servir ni aux mots de passe, ni aux autorisations, ni au secret, ni à l’anonymisation.
Comment rendre indépendants les déploiements de plusieurs fonctions ?
Ajoutez une clé de fonctionnalité stable et un séparateur avant ou après l’identifiant, puis conservez cette convention.
Quel est le prix d’un appel API ?
Chaque requête coûte $0.002. Le calculateur du navigateur effectue localement le même calcul déterministe.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/dev/feature-toggle-rollout-percent \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"identifier":"user_48291","rollout_percentage":25}'const res = await fetch("https://api.kit.forhosting.com/dev/feature-toggle-rollout-percent", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"identifier": "user_48291",
"rollout_percentage": 25
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/feature-toggle-rollout-percent",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"identifier": "user_48291",
"rollout_percentage": 25
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/feature-toggle-rollout-percent", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"identifier":"user_48291","rollout_percentage":25}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"identifier":"user_48291","rollout_percentage":25}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/feature-toggle-rollout-percent", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"identifier": "user_48291",
"rollout_percentage": 25
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.feature_toggle_rollout_percent",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |