Targeting con CEL

Common Expression Language (CEL) fornisce la logica per valutazioni sofisticate dei flag basate su regole. Consente di creare regole di targeting precise combinando più attributi di utenti o richieste utilizzando operatori logici.

Questa guida mostra come definire i flag con le regole CEL e aggiornare le specifiche di valutazione.

Prerequisiti

Prima di iniziare, assicurati di avere:

  1. Hai completato la guida rapida per il deployment dei flag funzionalità.
  2. Un ambiente gcloud configurato per gestire le risorse di App Lifecycle Manager.

Operatori logici e sintassi

CEL supporta gli operatori logici standard per creare condizioni complesse:

  • && AND logico
  • || OR logico
  • ! NOT logico
  • in controlla se un valore esiste in un elenco

Definisci gli attributi

Gli attributi CEL sono punti dati specifici, come source.ip, intestazioni delle richieste o percorsi, utilizzati all'interno di espressioni booleane per definire policy di sicurezza o di routing.

Qualsiasi attributo utilizzato in una condizione CEL deve essere definito ed elencato esplicitamente nell'array degli attributi di EvaluationSpec. Se un attributo viene utilizzato in una condizione ma non è presente nell'elenco, l'API rifiuterà la richiesta.

Creare un attributo

Puoi utilizzare App Lifecycle Manager per creare attributi CEL.

Per creare un attributo del piano, esegui il comando:

gcloud beta app-lifecycle-manager flags attributes create "plan-attr" \
    --key="plan" \
    --attribute-value-type="STRING" \
    --location=global

Per creare un attributo paese, esegui il comando:

gcloud beta app-lifecycle-manager flags attributes create "country-attr" \
    --key="country" \
    --attribute-value-type="STRING" \
    --location=global

Per creare un attributo della piattaforma, esegui questo comando:

gcloud beta app-lifecycle-manager flags attributes create "platform-attr" \
    --key="platform" \
    --attribute-value-type="STRING" \
    --location=global

Configurare un flag con regole CEL

Quando crei o aggiorni un flag, definisci la logica di valutazione in evaluation-spec.

Ad esempio, questo snippet attiva una funzionalità per i clienti premium in Germania che utilizzano la loro app mobile.

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"
      ]
    }'

Sostituisci PROJECT_ID e UNIT_KIND_NAME con i tuoi valori.

Integrazione di applicazioni

L'applicazione deve inserire gli attributi nel contesto di valutazione in fase di runtime.

Esempio 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)

Best practice

  • Ordine di valutazione:le regole vengono valutate in sequenza. La prima regola che restituisce true determina il valore del flag.
  • Impostazioni predefinite sicure:se in un contesto utente manca un attributo obbligatorio per una condizione, il motore di valutazione ignorerà la regola specifica.
  • Limiti di caratteri:le espressioni CEL possono avere una dimensione massima di 4096 byte (4 kB).

Passaggi successivi