App Configuration SDK de cliente React

Para mejorar la seguridad de las aplicaciones que utilizan ' ibm-appconfiguration-react-client-sdk', se recomienda encarecidamente utilizar una APIKey cifrada en lugar de la APIKey normal en el método init. Este cambio es vital para evitar la exposición de credenciales sensibles cuando los usuarios inspeccionan su aplicación web. Si ya está utilizando una APIKey sin cifrar, actualice su aplicación para generar y utilizar la APIKey cifrada siguiendo los pasos que se mencionan aquí.

Visión general

IBM Cloud App Configuration React Client SDK se utiliza para realizar la evaluación de la bandera de características y propiedades en aplicaciones web y realizar un seguimiento de las métricas personalizadas para Experimentación basado en la configuración en IBM Cloud App Configuration servicio.

IBM Cloud App Configuration es un servicio centralizado de gestión y configuración de funciones en IBM Cloud para su uso con aplicaciones web y móviles, microservicios y entornos distribuidos distribuidos.

Instrumente sus aplicaciones web con App Configuration React Client SDK, y utilice el cuadro de mandos, la CLI o la API App Configuration para definir banderas o propiedades de características, organizadas en colecciones y dirigidas a segmentos. Alterne los estados de los indicadores de funciones en la nube para activar o desactivar funciones en su aplicación o entorno, cuando sea necesario. Realice experimentos y mida el efecto de los indicadores de funciones en los usuarios finales mediante el seguimiento de métricas personalizadas. También puede gestionar las propiedades para aplicaciones distribuidas de forma central.

Compatibilidad : El SDK es compatible con React versión 16.8.0 y superior. Este SDK se basa en App Configuration JavaScript Client SDK para proporcionar una mejor integración para su uso en aplicaciones React. Como resultado, gran parte de la App Configuration JavaScript Client SDK también está disponible para el uso de React Client SDK. Más información sobre App Configuration JavaScript Client SDK desde aquí.

Integración de SDK de cliente para React

Instalación

Instale el SDK.

npm install ibm-appconfiguration-react-client-sdk

Inicializar SDK

Inicialice el sdk para conectarse con su instancia de servicio de App Configuration, como se muestra en el siguiente ejemplo. El encapsulado del componente de la app con AppConfigProvider le permite acceder a las características y propiedades desde cualquier nivel de la jerarquía de componentes.

import { withAppConfigProvider } from 'ibm-appconfiguration-react-client-sdk';

(async () => {
  const AppConfigProvider = await withAppConfigProvider({
    region: 'us-south',
    guid: '<guid>',
    apikey: '<encrypted_apikey>',
    collectionId: 'airlines-webapp',
    environmentId: 'dev'
  })

  ReactDOM.render(
    <AppConfigProvider>
        <YourApp />
    </AppConfigProvider>,
    document.getElementById('root')
  );
})();
  • región : Nombre de la región donde se crea la instancia del servicio App Configuration. Consulte aquí la lista de lugares compatibles. Por ejemplo: us-south, au-syd, etc.
  • guid : Id. de instancia del servicio App Configuration. Obténgala en la sección de credenciales de servicio del panel App Configuration.
  • apikey : La APIKey encriptada generada como se describe aquí.
  • collectionId: Id de la colección creada en la instancia de servicio App Configuration en la sección Colecciones.
  • environmentId: Id del entorno creado en la instancia de servicio App Configuration en la sección Entornos.

Utilice siempre la APIKey encriptada para evitar exponer información sensible.
Asegúrate de crear las credenciales de servicio con el rol ' Client SDK ', ya que tiene los permisos de acceso mínimos adecuados para su uso en aplicaciones basadas en navegador.

Ejemplos para utilizar API relacionadas con propiedades y características

Consulte los ejemplos siguientes para utilizar las API relacionadas con características.

Obtener una única característica

import { useFeature } from 'ibm-appconfiguration-react-client-sdk';

const feature = useFeature('featureId'); // returns undefined incase the featureId is invalid or doesn't exist

if (feature !== undefined) {
  console.log(`Feature Name ${feature.getFeatureName()} `);
  console.log(`Feature Id ${feature.getFeatureId()} `);
  console.log(`Feature Type ${feature.getFeatureDataType()} `);
  console.log(`Is feature enabled? ${feature.isEnabled()} `);
}

Obtener todas las características

import { useFeatures } from 'ibm-appconfiguration-react-client-sdk';

const features = useFeatures();
const feature = features['featureId'];

if (feature !== undefined) {
  console.log(`Feature Name ${feature.getFeatureName()} `);
  console.log(`Feature Id ${feature.getFeatureId()} `);
  console.log(`Feature Type ${feature.getFeatureDataType()} `);
  console.log(`Is feature enabled? ${feature.isEnabled()} `);
}

Evaluar una característica

Puede utilizar el método feature.getCurrentValue(entityId, entityAttributes) para evaluar el valor del distintivo de característica. Este método devuelve uno de los valores Habilitado/Inhabilitado/Sobrescrito basándose en la evaluación. El tipo de datos del valor devuelto coincide con el del distintivo de característica. Pase un entityId exclusivo como parámetro para realizar la evaluación de distintivos de características.

const entityId = 'john_doe';
const entityAttributes = {
  city: 'Bangalore',
  country: 'India',
};

const feature = useFeature('featureId');
const featureValue = feature.getCurrentValue(entityId, entityAttributes);

Donde:

  • entityId: ID de la entidad. Será un identificador de serie relacionado con la entidad con la que se evalúa la característica. Por ejemplo, una entidad puede ser una instancia de una aplicación que se ejecuta en un dispositivo móvil, o un usuario que accede a la aplicación web. Para que cualquier entidad interactúe con App Configuration, debe proporcionar un ID de entidad exclusivo.
  • entityAttributes: un objeto JSON que consta del nombre de atributo y sus valores que define la entidad especificada. Este es un parámetro opcional si el distintivo de característica no está configurado con ninguna definición de destino. Si el destino está configurado, se debe proporcionar entityAttributes para la evaluación de reglas. Un atributo es un parámetro que se utiliza para definir un segmento. El SDK utiliza los valores de atributo para determinar si la entidad especificada satisface las reglas de destino y devuelve el valor de distintivo de característica adecuado.

Enviar métricas personalizadas

Registre métricas personalizadas utilizando el hook ' useTrack ' en experimentación.

import { useTrack } from 'ibm-appconfiguration-react-client-sdk';

export default MyComponent = function () {
    const trackEvent = useTrack();
    return (
        <button onClick={() => trackEvent('clicked', 'user123')}>Buy</button>
    )
}

Obtener una única propiedad

import { useProperty } from 'ibm-appconfiguration-react-client-sdk';

const property = useProperty('propertyId'); // returns undefined incase the propertyId is invalid or doesn't exist

if (property !== undefined) {
  console.log(`Property Name ${property.getPropertyName()} `);
  console.log(`Property Id ${property.getPropertyId()} `);
  console.log(`Property Type ${property.getPropertyDataType()} `);
}

Obtener todas las propiedades

import { useProperties } from 'ibm-appconfiguration-react-client-sdk';

const properties = useProperties();
const property = properties['propertyId'];

if (property !== undefined) {
  console.log(`Property Name ${property.getPropertyName()} `);
  console.log(`Property Id ${property.getPropertyId()} `);
  console.log(`Property Type ${property.getPropertyDataType()} `);
}

Evaluar una propiedad

Utilice el método property.getCurrentValue(entityId, entityAttributes) para evaluar el valor de la propiedad. Este método devuelve el valor de propiedad predeterminado o su valor alterado temporalmente basándose en la evaluación. El tipo de datos del valor devuelto coincide con el de la propiedad.

const entityId = 'john_doe';
const entityAttributes = {
  city: 'Bangalore',
  country: 'India',
};

const property = useProperty('propertyId');
const propertyValue = property.getCurrentValue(entityId, entityAttributes);

Donde:

  • entityId: ID de la entidad. Será un identificador de serie relacionado con la entidad con la que se evalúa la propiedad. Para que cualquier entidad interactúe con App Configuration, debe proporcionar un ID de entidad exclusivo.
  • entityAttributes: un objeto JSON que consta del nombre de atributo y sus valores que define la entidad especificada. Este es un parámetro opcional si la propiedad no está configurada con ninguna definición de destino. Si el destino está configurado, se debe proporcionar entityAttributes para la evaluación de reglas. Un atributo es un parámetro que se utiliza para definir un segmento. El SDK utiliza los valores de atributo para determinar si la entidad especificada cumple las reglas de destino y devuelve el valor de propiedad adecuado.

Uso de valores fallback con React Client SDK

En caso de un error de conexión con el App Configuration, el SDK se basa en los valores de bandera evaluados más recientemente conservados en memoria. Sin embargo, si no existen valores previos en memoria, es aconsejable que los usuarios establezcan valores alternativos dentro de su código, garantizando un funcionamiento sin problemas. El siguiente ejemplo muestra este enfoque alternativo.


import { useFeatures } from 'ibm-appconfiguration-react-client-sdk';

export default function App {
  const features = useFeatures();
  const defaultFlagValues = {
    'flight-booking': false
  }
  const entityId = 'john_doe';
  const entityAttributes = {
    city: 'Bangalore',
    country: 'India',
  };

  const getAppConfigurationFlags = (featureID, features) => {
    if (Object.keys(features).length === 0 && features.constructor === Object) {
      return defaultFlagValues[featureID];
    }

    return feature[featureID]
      ? feature[featureID].getCurrentValue(entityId, entityAttributes)
      : defaultFlagValues[featureID];
  };

  return getAppConfigurationFlags('flight-booking', features) ? <div>Flight Booking</div> : '';
}

Tipos de datos soportados

App Configuration permite configurar la bandera y las propiedades de la característica en los siguientes tipos de datos : Booleano, Numérico, Cadena. El tipo de datos Serie puede tener el formato de una serie de texto, JSON o YAML. El SDK procesa cada como se muestra en la siguiente tabla.

Tabla de vista
Valor de característica o propiedad DataType DataFormat Tipo de datos devueltos
por getCurrentValue()
Ejemplo de salida
true BOOLEAN no aplicable boolean true
25 NUMERIC no aplicable number 25
"a string text" SERIE TEXTO string a string text
{
"firefox": {
"name": "Firefox",
"pref_url": "about:config"
}
}
SERIE JSON JSON object {"firefox":{"name":"Firefox","pref_url":"about:config"}}
men:
- John Smith
- Bill Jones
women:
- Mary Smith
- Susan Williams
SERIE YAML string

`"men:

  • John Smith
  • Bill Jones
    women:
  • Mary Smith
  • Susan Williams"`
Uso del indicador de función Ejemplo
const feature = useFeature('json-feature');
feature.getFeatureDataType(); // STRING
feature.getFeatureDataFormat(); // JSON

// Example (traversing the returned JSON)
let result = feature.getCurrentValue(entityId, entityAttributes);
console.log(result.key) // prints the value of the key

const feature = useFeature('yaml-feature');
feature.getFeatureDataType(); // STRING
feature.getFeatureDataFormat(); // YAML
feature.getCurrentValue(entityId, entityAttributes); // returns the stringified yaml (check above table)
Ejemplo de uso de propiedad
const property = useProperty('json-property');
property.getPropertyDataType(); // STRING
property.getPropertyDataFormat(); // JSON

// Example (traversing the returned JSON)
let result = property.getCurrentValue(entityId, entityAttributes);
console.log(result.key) // prints the value of the key

const property = useProperty('yaml-property');
property.getPropertyDataType(); // STRING
property.getPropertyDataFormat(); // YAML
property.getCurrentValue(entityId, entityAttributes); // returns the stringified yaml (check above table)

Licencia

Este proyecto se publica bajo la licencia Apache 2.0. El texto completo de la licencia puede encontrarse en LICENCIA

Escuchar los cambios de características o propiedades

El SDK se suscribe automáticamente al mecanismo basado en sucesos y vuelve a presentar los componentes incluidos cuando cambia la configuración de la propiedad o el distintivo de característica.