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.

  1. Utilizzare uno dei metodi seguenti per installare l'SDK:

    Utilizzo di pip

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

    Utilizzo di easy_install

    easy_install --upgrade ibm-appconfiguration-python-sdk
    
  2. Nel tuo codice dell'applicazione Python, includi il modulo SDK con:

    from ibm_appconfiguration import AppConfiguration, Feature, Property, ConfigurationType
    
  3. 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-syd ecc.
    • 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() e set_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 utilizzando AppConfiguration.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.json nella 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 comando ibmcloud ac export della CLI IBM Cloud App Configuration.
  • live_config_update_enabled: Aggiornamento della configurazione dal server. Impostare questo valore su False se 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_attributes deve 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_attributes deve 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.

Esempi di uscite
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 Jones
women:
- 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()