App Configuration-Server-SDK für Python
Der App Configuration-Service bietet SDKs für die Integration mit Ihrer Python-Anwendung an.
Server-SDK für Python integrieren
Der App Configuration-Service bietet SDKs für die Integration mit Ihrer Python-Anwendung an. Sie können die Werte Ihres Feature-Flags oder Ihrer Eigenschaft durch Integration des App Configuration SDK auswerten.
-
Verwenden Sie eine der folgenden Methoden, um das SDK zu installieren:
Verwendung von
pippip install --upgrade ibm-appconfiguration-python-sdkVerwendung von
easy_installeasy_install --upgrade ibm-appconfiguration-python-sdk -
Schließen Sie in Ihren Python-Anwendungscode das SDK-Modul ein mit:
from ibm_appconfiguration import AppConfiguration, Feature, Property, ConfigurationType -
Initialisieren Sie das SDK, um eine Verbindung zu Ihrer App Configuration-Serviceinstanz herzustellen.
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')Dabei gilt:
region: Name der Region, in der die Dienstinstanz App Configuration erstellt wird. Eine Liste der unterstützten Standorte finden Sie hier. Zum Beispiel:us-south,au-sydusw.guid: GUID des Dienstes App Configuration. Rufen Sie sie im Abschnitt mit den Serviceberechtigungsnachweisen des App Configuration-Service-Dashboards ab.apikey: ApiKey des Dienstes App Configuration. Rufen Sie sie im Abschnitt mit den Serviceberechtigungsnachweisen des App Configuration-Service-Dashboards ab.collection_id: ID der in der Dienstinstanz App Configuration erstellten Sammlung.environment_id: ID der in der Dienstinstanz App Configuration erstellten Umgebung.
Die
init()undset_context()sind die Initialisierungsmethoden und sollten nur einmal unter Verwendung von appconfig_client aufgerufen werden. Der appconfig_client kann nach der Initialisierung modulübergreifend überAppConfiguration.get_instance()abgerufen werden. Weitere Informationen finden Sie unter Appconfig_client über andere Module hinweg abrufen.
Private Endpunkte verwenden
Legen Sie das SDK für die Verbindung zum Service App Configuration fest, indem Sie einen privaten Endpunkt verwenden, auf den nur über das private Netz IBM Cloud zugegriffen werden kann.
appconfig_client.use_private_endpoint(True);
Dies muss vor dem Aufruf der Funktion init im SDK erfolgen.
Option zur Verwendung eines persistenten Caches für die Konfiguration
Damit Ihre Anwendung und Ihr SDK auch im unwahrscheinlichen Fall eines Ausfalls des App Configuration-Dienstes über den Neustart Ihrer Anwendung hinweg weiterarbeiten können, können Sie das SDK so konfigurieren, dass es mit einem dauerhaften Cache arbeitet. Das SDK verwendet den persistenten Cache zum Speichern der App Configuration-Daten, die bei den Neustarts Ihrer Anwendung verfügbar sind.
# 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/'
})
Dabei gilt:
-
persistent_cache_dir: Absoluter Pfad zu einem Verzeichnis, für das der Benutzer Lese- und Schreibrechte besitzt. Das SDK erstellt eine Datei -appconfiguration.json- in dem angegebenen Verzeichnis, die als dauerhafter Cache zum Speichern der App Configuration Dienstinformationen verwendet wird.Wenn der persistente Cache aktiviert ist, speichert das SDK die letzte bekannte gute Konfiguration im persistenten Cache. Wenn der Server App Configuration nicht erreichbar ist, werden die neuesten Konfigurationen aus dem persistenten Cache in die Anwendung geladen, damit diese weiterarbeiten kann.
Stellen Sie sicher, dass die im angegebenen Verzeichnis erstellte Cachedatei nicht verloren geht oder gelöscht wird. Beispiel: Angenommen, ein Kubernetes-Pod wird erneut gestartet und die Cachedatei (appconfiguration.json) wurde
auf einem ephemeren Datenträger des Pods gespeichert. Wenn ein Pod erneut gestartet wird, löscht Kubernetes den ephermal-Datenträger im Pod, sodass die Cachedatei gelöscht wird. Stellen Sie sicher, dass die vom SDK erstellte Cachedatei immer
im persistenten Datenträger gespeichert wird, indem Sie den richtigen absoluten Pfad des persistenten Verzeichnisses angeben.
Offline-Optionen
Das SDK ist auch für die Bereitstellung von Konfigurationen und die Durchführung von Feature-Flag-und Eigenschaftsauswertungen ohne Verbindung zum App Configuration-Service konzipiert.
appconfig_client.set_context(collection_id='collection_id', environment_id='environment_id', options={
'bootstrap_file': 'saflights/flights.json',
'live_config_update_enabled': False
})
Dabei gilt:
bootstrap_file: Absoluter Pfad der JSON-Datei, die Konfigurationsdetails enthält. Stellen Sie sicher, dass eine korrekte JSON-Datei bereitgestellt wird. Sie können diese Datei mit dem Befehlibmcloud ac exportder IBM Cloud App Configuration CLI erzeugen.live_config_update_enabled: Live-Konfigurationsaktualisierung vom Server. Setzen Sie diesen Wert aufFalse, wenn die neuen Konfigurationswerte nicht vom Server geholt werden sollen. Standardmäßig ist dieser Wert auf „Wahr“ gesetzt.
Beispiele für die Verwendung von Funktionen und eigenschaftsbezogenen APIs
Sehen Sie sich die aufgelisteten Beispiele für die Verwendung der Funktionen und eigenschaftsbezogenen APIs an.
Einzelnes Feature abrufen
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
Alle Features abrufen
features_dictionary = appconfig_client.get_features()
Feature-Auswertung
Sie können die Methode feature.get_current_value(entity_id, entity_attributes) verwenden, um den Wert des Merkmals auszuwerten. Diese Methode gibt basierend auf der Auswertung einen der Werte "Aktiviert", "Inaktiviert"
oder "Überschrieben" zurück. Der Datentyp des zurückgegebenen Werts stimmt mit dem des Feature-Flags überein.
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 der Entität. Dies ist eine Zeichenfolgekennung, die sich auf die Entität bezieht, für die das Feature ausgewertet wird. Eine Entität kann beispielsweise eine Instanz einer App sein, die auf einem mobilen Gerät ausgeführt wird, einen Mikroservice, der in der Cloud ausgeführt wird, oder eine Komponente der Infrastruktur, die diesen Mikroservice ausführt. Damit eine Entität mit App Configuration interagieren kann, muss sie eine eindeutige Entitäts-ID angeben -
entity_attributes: Ein JSON-Objekt, das aus dem Attributnamen und ihren Werten besteht, die die angegebene Entität definieren. Dies ist ein optionaler Parameter, wenn das Feature-Flag nicht mit einer Zieldefinition konfiguriert ist. Wenn das Ziel konfiguriert ist, sollteentity_attributesfür die Regelauswertung angegeben werden. Ein Attribut ist ein Parameter, der zum Definieren eines Segments verwendet wird. Das SDK verwendet die Attributwerte, um festzustellen, ob die angegebene Entität die Zielregeln erfüllt, und gibt den entsprechenden Feature-Flag-Wert zurück.
Einzeleigenschaft abrufen
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()))
Alle Eigenschaften abrufen
properties_dictionary = appconfig_client.get_properties()
Auswertung der Eigenschaft
Sie können die Methode property.get_current_value(entity_id=entity_id, entity_attributes=entity_attributes) verwenden, um den Wert der Immobilie zu ermitteln. Diese Methode gibt basierend auf der Auswertung den Standardeigenschaftswert
oder den überschriebenen Wert zurück. Der Datentyp des zurückgegebenen Werts entspricht dem des Merkmals.
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 der Entität. Dies ist eine Zeichenfolgekennung, die sich auf die Entität bezieht, für die die Eigenschaft ausgewertet wird. Eine Entität kann beispielsweise eine Instanz einer App sein, die auf einem mobilen Gerät ausgeführt wird, einen Mikroservice, der in der Cloud ausgeführt wird, oder eine Komponente der Infrastruktur, die diesen Mikroservice ausführt. Damit eine Entität mit App Configuration interagieren kann, muss sie eine eindeutige Entitäts-ID angeben -
entity_attributes: Ein JSON-Objekt, das aus dem Attributnamen und ihren Werten besteht, die die angegebene Entität definieren. Dies ist ein optionaler Parameter, wenn die Eigenschaft nicht mit einer Zieldefinition konfiguriert ist. Wenn das Ziel konfiguriert ist, sollteentity_attributesfür die Regelauswertung angegeben werden. Ein Attribut ist ein Parameter, der zum Definieren eines Segments verwendet wird. Das SDK verwendet die Attributwerte, um zu bestimmen, ob die angegebene Entität die Zielregeln erfüllt, und gibt den entsprechenden Eigenschaftswert zurück.
appconfig_client über andere Module hinweg abrufen
Wenn das SDK initialisiert ist, kann der appconfig_client wie gezeigt über andere Module bezogen werden:
# **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)
Unterstützte Datentypen
Sie können Feature-Flags und -Eigenschaften mit dem App Configuration-Service konfigurieren, um die folgenden Datentypen zu unterstützen: Boolesch, Numerisch und Zeichenfolge. Der Zeichenfolgedatentyp kann das Format einer TEXT-Zeichenfolge, JSON oder YAML haben. Das SDK verarbeitet jedes Format wie in der Tabelle dargestellt.
| Feature oder Eigenschaftswert | Datentyp | Datenformat | Typ der von GetCurrentValue() zurückgegebenen Daten |
Beispielausgabe |
|---|---|---|---|---|
true |
BOOLEAN | Nicht zutreffend | bool |
true |
25 |
NUMERIC | Nicht zutreffend | int |
25 |
| "ein Zeichenfolgetext" | STRING | TEXT | string |
a string text |
{"firefox": {"name": "Firefox","pref_url": "about:config"}} |
STRING | JSON | Dictionary or List of Dictionary |
{'firefox': {'name': 'Firefox', 'pref_url': 'about:config'}} |
men:- John Smith- Bill Joneswomen:- Mary Smith- Susan Williams |
STRING | YAML | Dictionary |
{'men': ['John Smith', 'Bill Jones'], 'women': ['Mary Smith', 'Susan Williams']} |
Feature-Flag
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']
Eigenschaft
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']
Listener für Feature- und Eigenschaftsdatenänderungen festlegen
Das SDK bietet einen Mechanismus, um Sie in Echtzeit zu benachrichtigen, wenn sich die Konfiguration von Feature Flags oder Eigenschaften ändert. Sie können Konfigurationsänderungen abonnieren, indem Sie denselben appconfig_client verwenden.
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)
Neueste Daten abrufen
appconfig_client.fetch_configurations()