SDK du serveur App Configuration pour Python

Le service App Configuration fournit un SDK à intégrer à votre application Python.

Intégration du SDK du serveur pour Python

Le service App Configuration fournit un SDK à intégrer à votre application Python. Vous pouvez évaluer les valeurs de votre indicateur de fonctionnalité ou de votre propriété en intégrant le SDK App Configuration.

  1. Utilisez l'une des méthodes suivantes pour installer le kit de développement de logiciels :

    Utilisation pip

    pip install --upgrade ibm-appconfiguration-python-sdk
    

    Utilisation easy_install

    easy_install --upgrade ibm-appconfiguration-python-sdk
    
  2. Dans votre code d'application Python, incluez le module SDK avec :

    from ibm_appconfiguration import AppConfiguration, Feature, Property, ConfigurationType
    
  3. Initialisez le sdk pour vous connecter à votre instance de service App Configuration.

    appconfig_client = AppConfiguration.get_instance()
    appconfig_client.init(region='region', guid='guid', apikey='apikey')
    appconfig_client.set_context(collection_id='airlines-webapp', environment_id='dev')
    

    Où :

    • region: Nom de la région où l'instance de service App Configuration est créée. Voir la liste des lieux pris en charge ici. Ex:- us-south, au-syd etc.
    • guid: GUID du service App Configuration. Vous pouvez l'obtenir à partir de la section des données d'identification du service du tableau de bord de service App Configuration.
    • apikey ApiKey le service App Configuration est un service d'information et de conseil sur la santé et la sécurité au travail. Vous pouvez l'obtenir à partir de la section des données d'identification du service du tableau de bord de service App Configuration.
    • collection_id: ID de la collection créée dans l'instance de service App Configuration.
    • environment_id: ID de l'environnement créé dans l'instance de service App Configuration.

    Le init() et set_context() sont les méthodes d'initialisation et ne doivent être invoquées qu'une seule fois à l'aide de appconfig_client. L'appconfig_client, lorsqu'il est initialisé, peut être obtenu entre les modules à l'aide de AppConfiguration.get_instance(). Pour plus d'informations, voir Extraction de l'élément appconfig_client sur d'autres modules.

Utilisation de noeuds finaux privés

Définissez le SDK pour qu'il se connecte au service App Configuration en utilisant un noeud final privé accessible uniquement via le réseau privé IBM Cloud.

appconfig_client.use_private_endpoint(True);

Cette opération doit être effectuée avant d'appeler la fonction init sur le SDK.

Option permettant d'utiliser une mémoire cache persistante pour la configuration

Pour que votre application et votre SDK continuent à fonctionner même dans le cas improbable d'un arrêt du service App Configuration, à travers le redémarrage de votre application, vous pouvez configurer le SDK pour qu'il fonctionne en utilisant un cache persistant. Le kit de développement de logiciels utilise le cache persistant pour stocker les données App Configuration disponibles lors du redémarrage de votre application.

# 1. default (without persistent cache)
appconfig_client.set_context(collection_id='airlines-webapp', environment_id='dev')

# 2. optional (with persistent cache)
appconfig_client.set_context(collection_id='airlines-webapp', environment_id='dev', options={
   'persistent_cache_dir': '/var/lib/docker/volumes/'
})

Où :

  • persistent_cache_dir: Chemin absolu vers un répertoire pour lequel l'utilisateur dispose d'une autorisation de lecture et d'écriture. Le SDK crée un fichier - appconfiguration.json- dans le répertoire spécifié, et l'utilise comme cache persistant pour stocker les informations du service App Configuration.

    Lorsque le cache persistant est activé, le SDK conserve la dernière bonne configuration connue dans le cache persistant. Si le serveur App Configuration est inaccessible, les dernières configurations du cache persistant sont chargées dans l'application pour qu'elle puisse continuer à fonctionner.

Vérifiez que le fichier cache créé dans le répertoire indiqué n'est pas perdu ou supprimé dans tous les cas. Par exemple, prenez en compte le cas où un pod kubernetes est redémarré et que le fichier cache (appconfiguration.json) a été stocké dans un volume éphémère du pod. Lorsque le pod est redémarré, kubernetes détruit le volume ephermal dans le pod, ce qui entraîne la suppression du fichier cache. Par conséquent, assurez-vous que le fichier cache créé par le SDK est toujours stocké dans le volume persistant en fournissant le chemin absolu correct du répertoire persistant.

Options hors ligne

Le kit de développement de logiciels est également conçu pour servir des configurations et effectuer des évaluations de propriété et d'indicateur de fonction sans être connecté au service App Configuration.

appconfig_client.set_context(collection_id='collection_id', environment_id='environment_id', options={
  'bootstrap_file': 'saflights/flights.json',
  'live_config_update_enabled': False
})

Où :

  • bootstrap_file: Chemin absolu du fichier JSON, qui contient les détails de la configuration. Veillez à fournir un fichier JSON approprié. Vous pouvez générer ce fichier en utilisant la commande ibmcloud ac export du CLI IBM Cloud App Configuration.
  • live_config_update_enabled: Mise à jour en direct de la configuration à partir du serveur. Définissez cette valeur sur False si les nouvelles valeurs de configuration ne doivent pas être récupérées sur le serveur. Par défaut, cette valeur est définie sur True.

Exemples d'utilisation des API liées aux fonctions et aux propriétés

Reportez-vous aux exemples répertoriés pour utiliser la fonction et les API associées à la propriété.

Extraction d'une fonctionnalité

feature = appconfig_client.get_feature('online-check-in')  # feature can be None incase of an invalid feature id

if feature is not None:
   print(f'Feature Name : {0}'.format(feature.get_feature_name()))
   print(f'Feature Id : {0}'.format(feature.get_feature_id()))
   print(f'Feature Data Type : {0}'.format(feature.get_feature_data_type()))
   if feature.is_enabled():
      # feature flag is enabled
   else:
      # feature flag is disabled

Extraction de toutes les fonctionnalités

features_dictionary = appconfig_client.get_features()

Evaluation des fonctionnalités

Vous pouvez utiliser la méthode feature.get_current_value(entity_id, entity_attributes) pour évaluer la valeur de l'indicateur de caractéristique. Cette méthode renvoie l'une des valeurs Activé, Désactivé ou Remplace en fonction de l'évaluation. Le type de données de la valeur renvoyée correspond à celui de l'indicateur de fonction.

entity_id = "john_doe"
entity_attributes = {
   'city': 'Bangalore',
   'country': 'India'
}
feature_value = feature.get_current_value(entity_id=entity_id, entity_attributes=entity_attributes)
  • entity_id: ID de l'entité. Il s'agit d'un identificateur de chaîne lié à l'entité par rapport à laquelle la fonction est évaluée. Par exemple, une entité peut être une instance d'une application qui s'exécute sur un appareil mobile, un microservice qui s'exécute sur le cloud ou un composant d'infrastructure qui exécute ce microservice. Pour qu'une entité interagisse avec App Configuration, elle doit fournir un ID d'entité unique.

  • entity_attributes: objet JSON composé du nom d'attribut et de ses valeurs qui définissent l'entité spécifiée. Il s'agit d'un paramètre facultatif si l'indicateur de fonction n'est pas configuré avec une définition de ciblage. Si le ciblage est configuré, entity_attributes doit être fourni pour l'évaluation de la règle. Un attribut est un paramètre utilisé pour définir un segment. Le SDK utilise les valeurs d'attribut pour déterminer si l'entité spécifiée satisfait aux règles de ciblage et renvoie la valeur d'indicateur de fonction appropriée.

Extraction d'une propriété

property = appconfig_client.get_property('check-in-charges')  # property can be None incase of an invalid property id
if property is not None:
   print(f'Property Name : {0}'.format(property.get_property_name()))
   print(f'Property Id : {0}'.format(property.get_property_id()))
   print(f'Property Data Type : {0}'.format(property.get_property_data_type()))

Extraction de toutes les propriétés

properties_dictionary = appconfig_client.get_properties()

Evaluation des propriétés

Vous pouvez utiliser la méthode property.get_current_value(entity_id=entity_id, entity_attributes=entity_attributes) pour évaluer la valeur du bien. Cette méthode renvoie la valeur de propriété par défaut ou sa valeur remplacée en fonction de l'évaluation. Le type de données de la valeur renvoyée correspond à celui de la propriété.

entity_id = "john_doe"
entity_attributes = {
   'city': 'Bangalore',
   'country': 'India'
}
property_value = property.get_current_value(entity_id=entity_id, entity_attributes=entity_attributes)
  • entity_id: ID de l'entité. Il s'agit d'un identificateur de chaîne lié à l'entité par rapport à laquelle la propriété est évaluée. Par exemple, une entité peut être une instance d'une application qui s'exécute sur un appareil mobile, un microservice qui s'exécute sur le cloud ou un composant d'infrastructure qui exécute ce microservice. Pour qu'une entité interagisse avec App Configuration, elle doit fournir un ID d'entité unique.

  • entity_attributes: objet JSON composé du nom d'attribut et de ses valeurs qui définissent l'entité spécifiée. Il s'agit d'un paramètre facultatif si la propriété n'est configurée avec aucune définition de ciblage. Si le ciblage est configuré, entity_attributes doit être fourni pour l'évaluation de la règle. Un attribut est un paramètre utilisé pour définir un segment. Le SDK utilise les valeurs d'attribut pour déterminer si l'entité spécifiée satisfait aux règles de ciblage et renvoie la valeur de propriété appropriée.

Extraction de appconfig_client sur d'autres modules

Lorsque le SDK est initialisé, l'appconfig_client peut être obtenu à travers d'autres modules comme indiqué :

# **other modules**

from ibm_appconfiguration import AppConfiguration

appconfig_client = AppConfiguration.get_instance()
feature = appconfig_client.get_feature('online-check-in')
enabled = feature.is_enabled()
feature_value = feature.get_current_value(entity_id, entity_attributes)

Types de données pris en charge

Vous pouvez configurer des indicateurs de fonction et des propriétés avec le service App Configuration, en prenant en charge les types de données suivants : Booléen, Numérique et Chaîne. Le type de données Chaîne peut être le format d'une chaîne TEXT, JSON ou YAML. Le kit de développement de logiciels traite chaque format comme indiqué dans le tableau.

Exemples de résultats
Valeur de la fonction ou de la propriété Type de données Format de données Type de données renvoyées par GetCurrentValue() Exemple de sortie
true BOOLEAN Non applicable bool true
25 NUMERIC Non applicable int 25
"a string text" CHAINE TEXT string a string text
{"firefox": {
"name": "Firefox",
"pref_url": "about:config"
} }
CHAINE JSON Dictionary or List of Dictionary {'firefox': {'name': 'Firefox', 'pref_url': 'about:config'}}
men:
- John Smith
- Bill Jones
women:
- Mary Smith
- Susan Williams
CHAINE YAML Dictionary {'men': ['John Smith', 'Bill Jones'], 'women': ['Mary Smith', 'Susan Williams']}

Indicateur de fonction

feature = appconfig_client.get_feature('json-feature')
feature.get_feature_data_type() // STRING
feature.get_feature_data_format() // JSON
feature.get_current_value(entityId, entityAttributes) // returns single dictionary object or list of dictionary object

// Example Below
// input json :- [{"role": "developer", "description": "do coding"},{"role": "tester", "description": "do testing"}]
// expected output :- "do coding"

tar_val = feature.get_current_value(entityId, entityAttributes)
expected_output = tar_val[0]['description']

// input json :- {"role": "tester", "description": "do testing"}
// expected output :- "tester"

tar_val = feature.get_current_value(entityId, entityAttributes)
expected_output = tar_val['role']

feature = appconfig_client.getFeature('yaml-feature')
feature.get_feature_data_type() // STRING
feature.get_feature_data_format() // YAML
feature.get_current_value(entityId, entityAttributes) // returns dictionary object

// Example Below
// input yaml string :- "---\nrole: tester\ndescription: do_testing"
// expected output :- "do_testing"

tar_val = feature.get_current_value(entityId, entityAttributes)
expected_output = tar_val['description']

Propriété

property = appconfig_client.get_property('json-property')
property.get_property_data_type() // STRING
property.get_property_data_format() // JSON
property.get_current_value(entityId, entityAttributes) // returns single dictionary object or list of dictionary object

// Example Below
// input json :- [{"role": "developer", "description": "do coding"},{"role": "tester", "description": "do testing"}]
// expected output :- "do coding"

tar_val = property.get_current_value(entityId, entityAttributes)
expected_output = tar_val[0]['description']

// input json :- {"role": "tester", "description": "do testing"}
// expected output :- "tester"

tar_val = property.get_current_value(entityId, entityAttributes)
expected_output = tar_val['role']

property = appconfig_client.get_property('yaml-property')
property.get_property_data_type() // STRING
property.get_property_data_format() // YAML
property.get_current_value(entityId, entityAttributes) // returns dictionary object

// Example Below
// input yaml string :- "---\nrole: tester\ndescription: do_testing"
// expected output :- "do_testing"

tar_val = property.get_current_value(entityId, entityAttributes)
expected_output = tar_val['description']

Définir le programme d'écoute pour les modifications de données de la fonction et de la propriété

Le SDK fournit un mécanisme de notification en temps réel lorsque la configuration des drapeaux ou des propriétés est modifiée. Vous pouvez vous abonner aux changements de configuration en utilisant le même appconfig_client.

def configuration_update(self):
   print('Received updates on configurations')
   # **add your code**
   # To find the effect of any configuration changes, you can call the feature or property related methods

   # feature = appconfig_client.getFeature('online-check-in')
   # new_value = feature.get_current_value(entity_id, entity_attributes)

appconfig_client.register_configuration_update_listener(configuration_update)

Extraction des données les plus récentes

appconfig_client.fetch_configurations()