A Common Expression Language (CEL) fornece a lógica para avaliações de flag sofisticadas baseadas em regras. Ela permite criar regras de segmentação precisas combinando vários atributos de usuário ou solicitação usando operadores lógicos.
Este guia mostra como definir flags com regras CEL e atualizar as especificações de avaliação.
Pré-requisitos
Antes de começar, verifique se você atende a estes requisitos:
- Concluiu o guia de início rápido de flags de recursos de implantação.
- Um ambiente
gcloudconfigurado para gerenciar recursos do App Lifecycle Manager.
Operadores lógicos e sintaxe
A CEL oferece suporte a operadores lógicos padrão para criar condições complexas:
&&AND lógico||OR lógico!NOT lógicoinverifica se um valor existe em uma lista
Definir atributos
Os atributos CEL são pontos de dados específicos, como source.ip, cabeçalhos de solicitação ou caminhos, usados em expressões booleanas para definir políticas de segurança ou roteamento.
Qualquer atributo usado em uma condição CEL precisa ser definido e listado explicitamente na matriz de atributos do EvaluationSpec. Se um atributo for usado em uma condição, mas estiver ausente da lista, a API vai rejeitar a solicitação.
Criar um atributo
É possível usar o App Lifecycle Manager para criar atributos CEL.
Para criar um atributo de plano, execute o comando:
gcloud beta app-lifecycle-manager flags attributes create "plan-attr" \
--key="plan" \
--attribute-value-type="STRING" \
--location=global
Para criar um atributo de país, execute o comando:
gcloud beta app-lifecycle-manager flags attributes create "country-attr" \
--key="country" \
--attribute-value-type="STRING" \
--location=global
Para criar um atributo de plataforma, execute o comando:
gcloud beta app-lifecycle-manager flags attributes create "platform-attr" \
--key="platform" \
--attribute-value-type="STRING" \
--location=global
Configurar uma flag com regras CEL
Ao criar ou atualizar uma flag, defina a lógica de avaliação na evaluation-spec.
Por exemplo, este snippet ativa um recurso para clientes premium na Alemanha usando o app para dispositivos móveis.
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"
]
}'
Substitua PROJECT_ID e UNIT_KIND_NAME pelos seus valores.
Integração do aplicativo
O aplicativo precisa injetar os atributos no contexto de avaliação no momento da execução.
Exemplo 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áticas recomendadas
- Ordem de avaliação:as regras são avaliadas sequencialmente. A primeira regra que é avaliada como verdadeira determina o valor da flag.
- Padrões seguros:se um contexto de usuário não tiver um atributo necessário para uma condição, o mecanismo de avaliação vai ignorar essa regra específica.
- Limites de caracteres:as expressões CEL podem ter até 4.096 bytes (4 kB).
A seguir
- Saiba mais sobre a arquitetura multitenant.
- Saiba mais sobre testes A/B e experimentação.