SDK server App Configuration per Python
Il servizio App Configuration fornisce l'SDK per l'integrazione con la tua applicazione Python.
Integrazione dell'SDK server per Python
Il servizio App Configuration fornisce l'SDK per l'integrazione con la tua applicazione Python. Puoi valutare i valori del tuo indicatore o proprietà della funzione integrando l'SDK App Configuration.
-
Utilizzare uno dei metodi seguenti per installare l'SDK:
Utilizzo di
pippip install --upgrade ibm-appconfiguration-python-sdkUtilizzo di
easy_installeasy_install --upgrade ibm-appconfiguration-python-sdk -
Nel tuo codice dell'applicazione Python, includi il modulo SDK con:
from ibm_appconfiguration import AppConfiguration, Feature, Property, ConfigurationType -
Inizializza l'sdk per connetterti con la tua istanza del servizio 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')Dove:
region: Nome della regione in cui viene creata l'istanza del servizio App Configuration. Vedere l'elenco delle località supportate qui. Ad esempio:us-south,au-sydecc.guid: GUID del servizio App Configuration. Ottieni questo dalla sezione delle credenziali del servizio del dashboard del servizio App Configuration.apikey: ApiKey del servizio App Configuration. Ottieni questo dalla sezione delle credenziali del servizio del dashboard del servizio App Configuration.collection_id: ID della raccolta creata nell'istanza del servizio App Configuration.environment_id: ID dell'ambiente creato nell'istanza del servizio App Configuration.
init()eset_context()sono i metodi di inizializzazione e devono essere richiamati solo una volta utilizzando appconfig_client. appconfig_client, quando inizializzato, può essere ottenuto tra i moduli utilizzandoAppConfiguration.get_instance(). Per ulteriori informazioni, vedi Fetching the appconfig_client across other modules.
Utilizzo degli endpoint privati
Imposta l'SDK per la connessione al servizio App Configuration utilizzando un endpoint privato accessibile solo tramite la rete privata IBM Cloud.
appconfig_client.use_private_endpoint(True);
Ciò deve essere fatto prima di richiamare la funzione init sull'SDK.
Opzione per utilizzare una cache persistente per la configurazione
Perché la tua applicazione e il tuo SDK continuino le operazioni anche durante lo scenario improbabile di un tempo di inattività di un servizio App Configuration, tra i riavvii della tua applicazione, puoi configurare l'SDK per funzionare utilizzando una cache persistente. L'SDK utilizza la cache persistente per memorizzare i dati App Configuration disponibili durante i riavvii dell'applicazione.
# 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/'
})
Dove:
-
persistent_cache_dir: percorso assoluto di una directory che dispone dell'autorizzazione di lettura e scrittura per l'utente. L'SDK crea un file -appconfiguration.jsonnella directory specificata e viene utilizzato come cache persistente per memorizzare informazioni sul servizio App Configuration.Quando la cache persistente è abilitata, l'SDK conserva l'ultima configurazione valida nota nella cache persistente. Se il server App Configuration non è raggiungibile, le ultime configurazioni nella cache persistente vengono caricate nell'applicazione per continuare a funzionare.
Verificare che il file della cache creato nella directory fornita non venga perso o eliminato in alcun caso. Ad esempio, si consideri il caso in cui un pod kubernetes viene riavviato e il file di cache (appconfiguration.json)
è stato memorizzato in un volume temporaneo del pod. Quando il pod viene riavviato, kubernetes distrugge il volume ephermal nel pod, di conseguenza il file della cache viene eliminato. Quindi, assicurati che il file di cache creato dall'SDK
sia sempre memorizzato nel volume persistente fornendo il percorso assoluto corretto della directory persistente.
Opzioni offline
L'SDK è anche progettato per servire le configurazioni ed eseguire valutazioni di proprietà e indicatori di funzione senza essere connesso al servizio 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
})
Dove:
bootstrap_file: percorso assoluto del file JSON, che contiene dettagli di configurazione. Assicurarsi di fornire un corretto file JSON. È possibile generare questo file utilizzando il comandoibmcloud ac exportdella CLI IBM Cloud App Configuration.live_config_update_enabled: Aggiornamento della configurazione dal server. Impostare questo valore suFalsese i nuovi valori di configurazione non devono essere recuperati dal server. Per impostazione predefinita, questo valore è impostato su Vero.
Esempi per l'uso di API correlate a funzioni e proprietà
Fare riferimento agli esempi elencati per l'utilizzo della funzione e delle API relative alla proprietà.
Ottieni funzione singola
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
Ottieni tutte le funzioni
features_dictionary = appconfig_client.get_features()
Valutazione funzione
È possibile utilizzare il metodo feature.get_current_value(entity_id, entity_attributes) per valutare il valore dell'indicatore di funzione. Questo metodo restituisce uno dei valori Abilitato, Disabilitato o Sovrascritto in
base alla valutazione. Il tipo di dati del valore restituito corrisponde a quello dell'indicatore funzione.
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 dell'entità. Si tratta di un identificativo stringa correlato all'entità rispetto alla quale viene valutata la funzione. Ad esempio, un'entità potrebbe essere un'istanza di un'applicazione che viene eseguita su un dispositivo mobile, un microservizio che viene eseguito sul Cloud o un componente dell'infrastruttura che esegue tale microservizio. Affinché qualsiasi entità interagisca con App Configuration, deve fornire un ID entità univoco. -
entity_attributes: un oggetto JSON costituito dal nome dell'attributo e dai relativi valori che definiscono l'entità specificata. Questo è un parametro facoltativo se l'indicatore della funzione non è configurato con alcuna definizione di destinazione. Se la destinazione è configurata,entity_attributesdeve essere fornito per la valutazione della regola. Un attributo è un parametro utilizzato per definire un segmento. L'SDK utilizza i valori degli attributi per stabilire se l'entità specificata soddisfa le regole di destinazione e restituisce il valore dell'indicatore della funzione appropriato.
Ottieni singola proprietà
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()))
Ottieni tutte le proprietà
properties_dictionary = appconfig_client.get_properties()
Valutazione proprietà
È possibile utilizzare il metodo property.get_current_value(entity_id=entity_id, entity_attributes=entity_attributes) per valutare il valore della proprietà. Questo metodo restituisce il valore della proprietà predefinito o
il relativo valore sovrascritto in base alla valutazione. Il tipo di dati del valore restituito corrisponde a quello della proprietà.
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 dell'entità. Si tratta di un identificativo stringa relativo all'entità rispetto alla quale viene valutata la proprietà. Ad esempio, un'entità potrebbe essere un'istanza di un'applicazione che viene eseguita su un dispositivo mobile, un microservizio che viene eseguito sul Cloud o un componente dell'infrastruttura che esegue tale microservizio. Affinché qualsiasi entità interagisca con App Configuration, deve fornire un ID entità univoco. -
entity_attributes: un oggetto JSON costituito dal nome dell'attributo e dai relativi valori che definiscono l'entità specificata. Questo è un parametro facoltativo se la proprietà non è configurata con alcuna definizione di destinazione. Se la destinazione è configurata,entity_attributesdeve essere fornito per la valutazione della regola. Un attributo è un parametro utilizzato per definire un segmento. L'SDK utilizza i valori degli attributi per stabilire se l'entità specificata soddisfa le regole di destinazione e restituisce il valore della proprietà appropriato.
Recupero di appconfig_client su altri moduli
Quando l'SDK viene inizializzato, è possibile ottenere appconfig_client su altri moduli come mostrato:
# **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)
Tipi di dati supportati
Puoi configurare gli indicatori e le proprietà della funzione con il servizio App Configuration, supportando i seguenti tipi di dati: Boolean, Numeric e String. Il tipo di dati String può avere il formato di una stringa TEXT, JSON o YAML. L'SDK elabora ciascun formato come mostrato nella tabella.
| Valore della funzione o della proprietà | Tipo di dati | Formato dati | Tipo di dati restituiti da GetCurrentValue() |
Output di esempio |
|---|---|---|---|---|
true |
BOOLEAN | Non applicabile | bool |
true |
25 |
NUMERIC | Non applicabile | int |
25 |
| "a string text" | 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']} |
Indicatore di funzione
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']
Proprietà
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']
Imposta listener per le modifiche ai dati della funzione e della proprietà
L'SDK fornisce un meccanismo per notificare in tempo reale le modifiche di configurazione degli indicatori di funzione o delle proprietà. È possibile sottoscrivere le modifiche di configurazione utilizzando lo stesso 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)
Recupera dati più recenti
appconfig_client.fetch_configurations()