מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
תנאים מאפשרים לשרתי proxy ל-API לפעול באופן דינמי בזמן ריצה. התנאים מגדירים פעולות
במשתנים שנבדקים על ידי צינור עיבוד הנתונים של Apigee Edge. הצהרות מותנות
הם בוליאניים ותמיד מוערכים ל-true
או ל-false
.
סקירה כללית של התנאים
בקטע הזה מוסבר איך ואיפה להשתמש בהצהרות מותנות ב-Edge. בנוסף, בקטעים הבאים מתארים את התחביר:
המבנה של הצהרות מותנות
המבנה הבסיסי של הצהרה מותנית הוא:
<Condition>variable.name operator "value"</Condition>
לדוגמה:
<Condition>request.verb = "GET"</Condition>
אפשר לשלב תנאים עם AND כדי לאכוף יותר מתנאי אחד בכל פעם. לדוגמה,
התנאים הבאים מעריכים ל-true
רק אם ה-URI של הבקשה תואם
/statuses
ופועל ה-HTTP של הבקשה הוא
GET
:
<Condition>(proxy.pathsuffix MatchesPath "/statuses") and (request.verb = "GET")</Condition>
איפה אפשר להשתמש בהצהרות מותנות
אפשר להשתמש בתנאים כדי לשלוט בהתנהגות בפריטים הבאים:
ביצוע המדיניות
באמצעות הצהרות מותנות תוכלו לשלוט באכיפה של כללי מדיניות. תרחיש לדוגמה נפוץ היא טרנספורמציה מותנית של הודעות תשובה, על סמך כותרת HTTP או תוכן הודעה.
בדוגמה הבאה מתבצעת טרנספורמציה מותנית של XML ל-JSON על סמך Accept
כותרת:
<Step> <Condition>request.header.accept = "application/json"</Condition> <Name>XMLToJSON</Name> </Step>
ביצוע התהליך
באמצעות הצהרות מותנות אפשר לשלוט בביצוע של תהליכים בעלי שם ב-ProxyEndpoints ו-TargetEndpoints. לתשומת ליבכם: רק 'עם שם' יכולות להתבצע באופן מותנה. תהליכי עבודה מראש וגם תהליכים (postflows) (גם בקשה וגם תגובה) ב-ProxyEndpoints וגם ב-TargetEndpoints מופעלים בכל עסקה, ולכן מספקים 'failsafe' לא מותנה יכולות.
לדוגמה, להפעיל תהליך של בקשה מותנית על סמך פועל ה-HTTP של הבקשה והודעות, ותהליך תגובה מותנית שמבוסס על קוד סטטוס HTTP (פוטנציאלי) שמייצג שגיאה:
<Flow name="GetRequests"> <Condition>request.verb = "GET"</Condition> <Request> <Step> <Condition>request.path MatchesPath "/statuses/**"</Condition> <Name>StatusesRequestPolicy</Name> </Step> </Request> <Response> <Step> <Condition>(response.status.code = 503) or (response.status.code = 400)</Condition> <Name>MaintenancePolicy</Name> </Step> </Response> </Flow>
בחירת מסלול לנקודת קצה (endpoint)
באמצעות הצהרות מותנות אפשר לשלוט בנקודת הקצה מסוג יעד שמופעל על ידי נקודת הקצה של שרת proxy הגדרה אישית. כלל נתיב מעביר בקשה לנקודת קצה ספציפית של יעד. כאשר יותר מ- יש נקודת קצה אחת (endpoint) זמינה, כלל המסלול נבדק לפי המצב שלו, ואם הוא מתקיים, הבקשה מועברת לנקודת הקצה (endpoint) של היעד שצוין.
לדוגמה, לנתב הודעות באופן מותנה לנקודות קצה (endpoint) ייעודיות
Content-Type
:
<RouteRule name="default">
<!--this routing executes if the header indicates that this is an XML call. If true, the call is routed to the endpoint XMLTargetEndpoint-->
<Condition>request.header.Content-Type = "text/xml"</Condition>
<TargetEndpoint>XmlTargetEndpoint</TargetEndpoint>
</RouteRule>
מידע נוסף על Flow Variables ו תנאים כדי לקבל מידע נוסף.
ביטויי נתיב
ביטויי נתיבים משמשים להתאמה לנתיבי URI, באמצעות "*" לייצוג רכיב נתיב יחיד וגם '**' כדי לייצג מספר רמות URI.
לדוגמה:
דוגמת קוד | נתיבי URI לדוגמה תואמים |
---|---|
/*/a/ |
/x/a/ או /y/a/ |
/*/a/* |
/x/a/b או /y/a/foo |
/*/a/** |
/x/a/b/c/d |
/*/a/*/feed/ |
/x/a/b/feed/ או /y/a/foo/feed/ |
/a/**/feed/** |
/a/b/feed/rss/1234 |
המערכת מתייחסת ל-%
כתו בריחה (escape).
הדפוס %{user%}
תואם ל-{user}
אבל לא
user
.
משתנים
אתם יכולים להשתמש גם במשתני זרימה מובנים וגם במשתנים מותאמים אישית בהצהרות מותנות. מידע נוסף זמין בדפים הבאים:
- חומר עזר בנושא משתני זרימה: רשימה מלאה של המשתנים המובנים
- המדיניות exportVariables: הוראות להגדרת משתנים מותאמים אישית
אופרטורים
כשמשתמשים באופרטורים, חשוב להקפיד על ההגבלות הבאות:
- אי אפשר להשתמש באופרטורים כשמות משתנים.
- צריך להוסיף רווח לפני ואחרי אופרטור.
- כדי לכלול אופרטור במשתנה, שם המשתנה צריך להיות מוקף במירכאות בודדות.
לדוגמה,
'request.header.help!me'
. - אין תמיכה באופרטורים אריתמטיים (
+ * - / %
). - Java קדימות משמשת לאופרטורים.
- Apigee Edge מסתמך על ביטויים רגולריים כפי שהוא מוטמע ב-
java.util.regex
בטבלה הבאה מפורטים האופרטורים הנתמכים. אפשר להשתמש בסמל או במילה ביטויים:
סמל | Microsoft Word | תיאור |
---|---|---|
! |
Not , not |
אופרטור אונרי (משתמש בקלט אחד) |
= |
Equals , Is |
שווה ל- (תלוי אותיות רישיות) |
!= |
NotEquals , IsNot |
לא שווה (תלוי אותיות רישיות) |
:= |
EqualsCaseInsensitive |
זהה אבל לא תלוי רישיות |
> או > |
GreaterThan |
גדול מ-. אם משתמשים בתו > כשמגדירים את התנאי בממשק המשתמש של Edge, הוא הומר ל->. |
>= או >= |
GreaterThanOrEquals |
גדול מ- או שווה ל-. אם משתמשים בתו >= כשמגדירים את התנאי בממשק המשתמש של Edge, הוא מומר ל->=. |
< |
LesserThan |
קטן מ-. בממשק המשתמש של Edge אין תמיכה בליטרל <. |
<= |
LesserThanOrEquals |
קטן מ- או שווה ל-. בממשק המשתמש של Edge אין תמיכה בליטרל <=. |
&& |
And , and |
וגם |
|| |
Or |
האופרטור Or אינו תלוי אותיות רישיות. לדוגמה, OR , Or ו-or תקינים. |
() |
מקבצת ביטוי. השדה ( פותח את הביטוי ו-) נסגר.
את זה. |
|
~~ |
JavaRegex |
תואם לביטוי רגולרי שעומד בדרישות של |
~ |
Matches , Like |
מתאים לתבנית בסגנון glob באמצעות "*" תו כללי לחיפוש. ההתאמה היא תלוי אותיות רישיות. אפשר לראות דוגמאות במאמר התאמת תבניות עם תנאים. |
~/ |
MatchesPath , LikePath |
מתאים לביטוי נתיב. ההתאמה היא תלוית אותיות רישיות. אפשר לראות דוגמאות במאמר התאמת תבניות עם תנאים. |
=| |
StartsWith |
מתאים לתווים הראשונים במחרוזת. ההתאמה היא תלוית אותיות רישיות. |
מפרסמים
ב-Apigee Edge מתאים אופרנדים לסוג נתונים נפוץ לפני ההשוואה ביניהם. לדוגמה, אם
קוד הסטטוס של התשובה הוא 404, הביטוי response.status.code = "400"
והביטוי
הערכים response.status.code = 400
מקבילים.
באופרנדים מספריים, סוג הנתונים מפורש כמספר שלם, אלא אם הערך מסתיים. ככה:
- 'f' או F (float, לדוגמה: 3.142f, 91.1F)
- 'd' או D (כפול, לדוגמה: 3.142d , 100.123D)
- "l" או L (אורך, לדוגמה: 12321421312L)
במקרים כאלה המערכת מבצעת התאמות שמוצגות בטבלה הבאה (כאשר RHS מתייחס ל- מצד ימין של המשוואה ו-LHS הוא הצד השמאלי):
RHS LHS | בוליאני | מספר שלם | ארוך | Float | כפול | מחרוזת | ניתן להשוואה | אובייקט |
---|---|---|---|---|---|---|---|---|
בוליאני | בוליאני | מספר שלם | ארוך | Float | כפול | מחרוזת | - | |
מספר שלם | מספר שלם | מספר שלם | ארוך | Float | כפול | מחרוזת | ניתן להשוואה | - |
ארוך | ארוך | ארוך | ארוך | Float | כפול | מחרוזת | ניתן להשוואה | - |
Float | Float | Float | Float | Float | כפול | מחרוזת | ניתן להשוואה | - |
כפול | כפול | כפול | כפול | כפול | כפול | מחרוזת | ניתן להשוואה | - |
מחרוזת | מחרוזת | מחרוזת | מחרוזת | מחרוזת | מחרוזת | מחרוזת | ניתן להשוואה | - |
ניתן להשוואה | ניתן להשוואה | ניתן להשוואה | ניתן להשוואה | ניתן להשוואה | ניתן להשוואה | ניתן להשוואה | ניתן להשוואה | - |
אובייקט | - | - | - | - | - | - | - | - |
אופרנדים עם ערכי null
בטבלה הבאה אפשר לראות אם התנאים הם true
או
false
כשהערכים הם null בצד שמאל (LHS) ו/או בצד ימין (RHS)
של האופרנד שמוצג:
מפעיל | LHS null | RHS ריק | LHS ו-RHS null |
---|---|---|---|
= , == := |
לא נכון | לא נכון | true |
=| |
לא נכון | לא נכון | לא נכון |
!= |
true | true | לא נכון |
> או > |
true | לא נכון | לא נכון |
>= או >= |
לא נכון | true | true |
< |
true | לא נכון | לא נכון |
<= |
true | לא נכון | true |
~ |
לא נכון | לא רלוונטי | לא נכון |
~~ |
לא נכון | לא רלוונטי | לא נכון |
!~ |
true | לא נכון | לא נכון |
~/ |
לא נכון | לא רלוונטי | לא נכון |
ייצוג מילולי
בנוסף לליטרל מחרוזת ולליטרל מספרי, ניתן להשתמש בליטרלים הבאים של הצהרות מותנות:
null
true
false
לדוגמה:
request.header.host is null
flow.cachehit is true
דוגמאות
<RouteRule name="default"> <Condition>request.header.content-type = "text/xml"</Condition> <TargetEndpoint>XmlTargetEndpoint</TargetEndpoint> </RouteRule>
<Step> <Condition>response.status.code = 503</Condition> <Name>MaintenancePolicy</Name> </Step>
<Flow name="GetRequests"> <Condition>response.verb="GET"</Condition> <Request> <Step> <Condition>request.path ~ "/statuses/**"</Condition> <Name>StatusesRequestPolicy</Name> </Step> </Request> <Response> <Step> <Condition>(response.status.code = 503) or (response.status.code = 400)</Condition> <Name>MaintenancePolicy</Name> </Step> </Response> </Flow>