Die Common Expression Language (CEL) bietet die Logik für komplexe, regelbasierte Flag-Auswertungen. Sie ermöglicht es Ihnen, präzise Targeting-Regeln zu erstellen, indem Sie mehrere Nutzer- oder Anfrageattribute mit logischen Operatoren kombinieren.
In diesem Leitfaden erfahren Sie, wie Sie Flags mit CEL-Regeln definieren und Auswertungsspezifikationen aktualisieren.
Vorbereitung
Prüfen Sie zuerst, ob Sie Folgendes haben:
- Die Schnellstartanleitung zum Bereitstellen von Feature-Flags durchgearbeitet.
- Eine
gcloud-Umgebung, die für die Verwaltung von App Lifecycle Manager-Ressourcen konfiguriert ist.
Logische Operatoren und Syntax
CEL unterstützt Standardoperatoren zum Erstellen komplexer Bedingungen:
&&Logisches UND||Logisches ODER!Logisches NICHTinPrüfen, ob ein Wert in einer Liste vorhanden ist
Attribute definieren
CEL-Attribute sind bestimmte Datenpunkte wie source.ip, Anfrageheader oder Pfade, die in booleschen Ausdrücken verwendet werden, um Sicherheits- oder Routingrichtlinien zu definieren.
Jedes Attribut, das in einer CEL-Bedingung verwendet wird, muss explizit definiert und im Attributarray der EvaluationSpec aufgeführt sein. Wenn ein Attribut in einer Bedingung verwendet wird, aber in der Liste fehlt, lehnt die API die Anfrage ab.
Attribut erstellen
Sie können mit App Lifecycle Manager CEL-Attribute erstellen.
Führen Sie den folgenden Befehl aus, um ein Planattribut zu erstellen:
gcloud beta app-lifecycle-manager flags attributes create "plan-attr" \
--key="plan" \
--attribute-value-type="STRING" \
--location=global
Führen Sie den folgenden Befehl aus, um ein Länderattribut zu erstellen:
gcloud beta app-lifecycle-manager flags attributes create "country-attr" \
--key="country" \
--attribute-value-type="STRING" \
--location=global
Führen Sie den folgenden Befehl aus, um ein Plattformattribut zu erstellen:
gcloud beta app-lifecycle-manager flags attributes create "platform-attr" \
--key="platform" \
--attribute-value-type="STRING" \
--location=global
Flag mit CEL-Regeln konfigurieren
Definieren Sie beim Erstellen oder Aktualisieren eines Flags die Auswertungslogik in der evaluation-spec.
Mit diesem Snippet wird beispielsweise eine Funktion für Premium-Kunden in Deutschland aktiviert, die ihre mobile App verwenden.
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"
]
}'
Ersetzen Sie PROJECT_ID und UNIT_KIND_NAME durch Ihre Werte.
Anwendungseinbindung
Ihre Anwendung muss die Attribute zur Laufzeit in den Auswertungskontext einfügen.
Python-Beispiel:
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 Practices
- Reihenfolge der Auswertung:Regeln werden sequenziell ausgewertet. Die erste Regel, die als „true“ ausgewertet wird, bestimmt den Wert des Flags.
- Sichere Standardeinstellungen:Wenn in einem Nutzerkontext ein erforderliches Attribut für eine Bedingung fehlt, überspringt die Auswertungs-Engine diese bestimmte Regel.
- Zeichenlimits:CEL-Ausdrücke dürfen maximal 4.096 Byte (4 KB) groß sein.
Nächste Schritte
- Informationen zur Multi-Tenant-Architektur
- Informationen zu Tests und A/B-Tests