Common Expression Language (CEL) מספקת את הלוגיקה להערכות מתוחכמות של דגלים שמבוססות על כללים. הוא מאפשר ליצור כללי טירגוט מדויקים על ידי שילוב של כמה מאפיינים של משתמשים או בקשות באמצעות אופרטורים לוגיים.
במדריך הזה מוסבר איך מגדירים דגלים באמצעות כללי CEL ואיך מעדכנים את מפרטי ההערכה.
דרישות מוקדמות
לפני שמתחילים, חשוב לוודא שיש לכם:
- השלמתם את המדריך למתחילים בנושא פריסת דגלים של תכונות.
- סביבת
gcloudשמוגדרת לניהול משאבים של App Lifecycle Manager.
אופרטורים לוגיים ותחביר
שפת CEL תומכת באופרטורים לוגיים רגילים ליצירת תנאים מורכבים:
&&AND לוגי||OR לוגי!שלילה לוגיתinבדיקה אם ערך מסוים קיים ברשימה
הגדרת מאפיינים
מאפייני CEL הם נקודות נתונים ספציפיות, כמו source.ip, כותרות בקשות או נתיבים, שמשמשים בביטויים בוליאניים להגדרת מדיניות אבטחה או ניתוב.
כל מאפיין שמשמש בתנאי CEL צריך להיות מוגדר באופן מפורש ומופיע במערך המאפיינים של EvaluationSpec. אם משתמשים במאפיין בתנאי אבל הוא לא מופיע ברשימה, ה-API ידחה את הבקשה.
יצירת מאפיין
אפשר להשתמש ב-App Lifecycle Manager כדי ליצור מאפייני CEL.
כדי ליצור מאפיין של תוכנית, מריצים את הפקודה:
gcloud beta app-lifecycle-manager flags attributes create "plan-attr" \
--key="plan" \
--attribute-value-type="STRING" \
--location=global
כדי ליצור מאפיין של מדינה, מריצים את הפקודה:
gcloud beta app-lifecycle-manager flags attributes create "country-attr" \
--key="country" \
--attribute-value-type="STRING" \
--location=global
כדי ליצור מאפיין פלטפורמה, מריצים את הפקודה:
gcloud beta app-lifecycle-manager flags attributes create "platform-attr" \
--key="platform" \
--attribute-value-type="STRING" \
--location=global
הגדרת סימון באמצעות כללי CEL
כשיוצרים או מעדכנים דגל, מגדירים את לוגיקת ההערכה ב-evaluation-spec.
לדוגמה, הקטע הזה מאפשר הפעלה של תכונה ללקוחות פרימיום בגרמניה באמצעות האפליקציה לנייד.
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"
]
}'
מחליפים את PROJECT_ID ואת UNIT_KIND_NAME בערכים שלכם.
שילוב אפליקציות
האפליקציה צריכה להחדיר את המאפיינים להקשר ההערכה בזמן הריצה.
דוגמה ל-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)
שיטות מומלצות
- סדר ההערכה: הכללים מוערכים באופן עוקב. הכלל הראשון שהערך שלו הוא True קובע את הערך של הדגל.
- ברירות מחדל בטוחות: אם חסר מאפיין נדרש בתנאי בהקשר של משתמש, מנוע ההערכה ידלג על הכלל הספציפי הזה.
- מגבלות תווים: גודל הביטויים ב-CEL יכול להיות עד 4,096 בייט (4kB).