Common Expression Language (CEL) menyediakan logika untuk evaluasi flag berbasis aturan yang canggih. CEL memungkinkan Anda membuat aturan penargetan yang akurat dengan menggabungkan beberapa atribut pengguna atau permintaan menggunakan operator logika.
Panduan ini menunjukkan cara menentukan flag dengan aturan CEL dan memperbarui spesifikasi evaluasi.
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Menyelesaikan panduan memulai Men-deploy flag fitur.
- Lingkungan
gcloudyang dikonfigurasi untuk mengelola resource App Lifecycle Manager.
Operator dan sintaksis logika
CEL mendukung operator logika standar untuk membuat kondisi yang kompleks:
&&logika AND||logika OR!logika NOTinmemeriksa apakah nilai ada dalam daftar
Menentukan atribut
Atribut CEL adalah titik data tertentu, seperti source.ip, header permintaan, atau jalur, yang digunakan dalam ekspresi boolean untuk menentukan kebijakan keamanan atau perutean.
Setiap atribut yang digunakan dalam kondisi CEL harus ditentukan dan dicantumkan secara eksplisit dalam array atribut EvaluationSpec. Jika atribut digunakan dalam suatu kondisi tetapi tidak ada dalam daftar, API akan menolak permintaan tersebut.
Membuat atribut
Anda dapat menggunakan App Lifecycle Manager untuk membuat atribut CEL.
Untuk membuat atribut paket, jalankan perintah:
gcloud beta app-lifecycle-manager flags attributes create "plan-attr" \
--key="plan" \
--attribute-value-type="STRING" \
--location=global
Untuk membuat atribut negara, jalankan perintah:
gcloud beta app-lifecycle-manager flags attributes create "country-attr" \
--key="country" \
--attribute-value-type="STRING" \
--location=global
Untuk membuat atribut platform, jalankan perintah:
gcloud beta app-lifecycle-manager flags attributes create "platform-attr" \
--key="platform" \
--attribute-value-type="STRING" \
--location=global
Mengonfigurasi flag dengan aturan CEL
Saat membuat atau memperbarui flag, tentukan logika evaluasi di evaluation-spec.
Misalnya, cuplikan ini mengaktifkan fitur untuk pelanggan premium di Jerman menggunakan aplikasi seluler mereka.
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"
]
}'
Ganti PROJECT_ID, dan UNIT_KIND_NAME dengan nilai Anda.
Application integration
Aplikasi Anda harus memasukkan atribut ke dalam konteks evaluasi saat runtime.
Contoh 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)
Praktik terbaik
- Urutan Evaluasi: Aturan dievaluasi secara berurutan. Aturan pertama yang dievaluasi ke true akan menentukan nilai flag.
- Default Aman: Jika konteks pengguna tidak memiliki atribut yang diperlukan untuk suatu kondisi, mesin evaluasi akan melewati aturan tertentu tersebut.
- Batas Karakter: Ekspresi CEL dapat berukuran hingga 4.096 byte (4 kB).
Langkah berikutnya
- Pelajari tentang Arsitektur Multi-Tenant.
- Pelajari tentang Eksperimen dan Pengujian A/B.