Common Expression Language (CEL) proporciona la lógica para evaluaciones de marcas sofisticadas basadas en reglas. Te permite crear reglas de segmentación precisas combinando varios atributos del usuario o de la solicitud con operadores lógicos.
En esta guía, se muestra cómo definir marcas con reglas de CEL y actualizar las especificaciones de evaluación.
Requisitos previos
Antes de comenzar, asegúrate de contar con los siguientes aspectos:
- Completaste la guía de inicio rápido para implementar marcas de funciones.
- Un entorno de
gcloudconfigurado para administrar los recursos de App Lifecycle Manager.
Operadores lógicos y sintaxis
CEL admite operadores lógicos estándar para crear condiciones complejas:
&&AND lógico||OR lógico!NOT lógicoincomprueba si existe un valor en una lista
Define atributos
Los atributos de CEL son puntos de datos específicos, como source.ip, encabezados de solicitudes o rutas, que se usan en expresiones booleanas para definir políticas de seguridad o de enrutamiento.
Cualquier atributo que se use en una condición CEL debe definirse y enumerarse de forma explícita en el array de atributos de EvaluationSpec. Si se usa un atributo en una condición, pero no está en la lista, la API rechazará la solicitud.
Crea un atributo
Puedes usar App Lifecycle Manager para crear atributos de CEL.
Para crear un atributo del plan, ejecuta el siguiente comando:
gcloud beta app-lifecycle-manager flags attributes create "plan-attr" \
--key="plan" \
--attribute-value-type="STRING" \
--location=global
Para crear un atributo de país, ejecuta el siguiente comando:
gcloud beta app-lifecycle-manager flags attributes create "country-attr" \
--key="country" \
--attribute-value-type="STRING" \
--location=global
Para crear un atributo de plataforma, ejecuta el siguiente comando:
gcloud beta app-lifecycle-manager flags attributes create "platform-attr" \
--key="platform" \
--attribute-value-type="STRING" \
--location=global
Configura una marca con reglas de CEL
Cuando crees o actualices una marca, define la lógica de evaluación en evaluation-spec.
Por ejemplo, este fragmento habilita una función para los clientes premium de Alemania que usan la app para dispositivos móviles.
gcloud beta app-lifecycle-manager flags create "advanced-reporting-flag" \
--key="advanced-reporting-flag" \
--flag-value-type=BOOL \
--unit-kind="UNIT_KIND_NAME" \
--location=global \
--evaluation-spec='{
"rules": [{
"id": "premium_mobile_users_in_germany",
"condition": "plan == \"premium\" && country == \"DE\" && platform == \"mobile\"",
"target": "enabled"
}],
"defaultTarget": "disabled",
"attributes": [
"projects/PROJECT_ID/locations/global/flagAttributes/plan-attr",
"projects/PROJECT_ID/locations/global/flagAttributes/country-attr",
"projects/PROJECT_ID/locations/global/flagAttributes/platform-attr"
]
}'
Reemplaza PROJECT_ID y UNIT_KIND_NAME por tus valores.
Integración de aplicaciones
Tu aplicación debe insertar los atributos en el contexto de evaluación en el tiempo de ejecución.
Ejemplo de Python:
from openfeature.evaluation_context import EvaluationContext
eval_ctx = EvaluationContext(
targeting_key=user_id,
attributes={
"plan": "premium",
"country": "DE",
"platform": "mobile"
}
)
is_enabled = client.get_boolean_value("advanced-reporting-flag", False, eval_ctx)
Prácticas recomendadas
- Orden de evaluación: Las reglas se evalúan de forma secuencial. La primera regla que se evalúa como verdadera determina el valor de la marca.
- Configuración predeterminada segura: Si un contexto del usuario no incluye un atributo obligatorio para una condición, el motor de evaluación omitirá esa regla específica.
- Límites de caracteres: Las expresiones de CEL pueden tener un tamaño de hasta 4,096 bytes (4 KB).
¿Qué sigue?
- Obtén más información sobre la arquitectura multiusuario.
- Obtén más información sobre la experimentación y las pruebas A/B.