הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של
Apigee Edge
המדיניות ExtractVariables מחלצת תוכן מבקשה או מתגובה ומגדירה את הערך של משתנה לתוכן הזה. אפשר לחלץ כל חלק מההודעה, כולל כותרות, נתיבי URI, מטען ייעודי (payload) בפורמט JSON/XML, פרמטרים של טופס ופרמטרים של שאילתה. המדיניות פועלת על ידי החלת תבנית טקסט על תוכן ההודעה, ואם נמצאת התאמה, מוגדר משתנה עם תוכן ההודעה שצוין.
אפשר גם להשתמש במדיניות הזו כדי לחלץ מידע ממקורות אחרים, כמו ישויות שנוצרו על ידי מדיניות AccessEntity, אובייקטים של XML או אובייקטים של JSON.
אחרי חילוץ התוכן של ההודעה שצוין, אפשר להפנות למשתנה במדיניות אחרת כחלק מעיבוד של בקשה ותגובה. לדוגמה, אפשר להוסיף את מדיניות RaiseFault כדי להחזיר שגיאה אם הערך שחולץ לא תקין.
כשמגדירים את מדיניות ExtractVariables, אפשר לבחור:
- שמות המשתנים שיוגדרו
- מקור המשתנים
- כמה משתנים לחלץ ולהגדיר
כשמריצים את המדיניות, היא מחילה תבנית טקסט על התוכן, ואם נמצאת התאמה, היא מגדירה את הערך של המשתנה המיועד עם התוכן. מדיניות וקוד אחרים יכולים להשתמש במשתנים האלה כדי להפעיל התנהגות דינמית או כדי לשלוח נתונים עסקיים ל-Apigee API Analytics.
המדיניות הזו היא מדיניות ניתנת להרחבה, והשימוש בה עשוי להשפיע על העלויות או על ניצול המשאבים, בהתאם לרישיון Apigee שלכם. מידע על סוגי המדיניות וההשלכות של השימוש בהם זמין במאמר סוגי מדיניות.
דוגמאות
בדוגמאות הקוד הבאות של מדיניות אפשר לראות איך לחלץ משתנים מסוגי הארטיפקטים הבאים:
מזהי URI
<ExtractVariables name="ExtractVariables-1">
<DisplayName>Extract a portion of the url path</DisplayName>
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/accounts/{id}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>נבחן את קוד המדיניות לדוגמה שלמעלה. רכיב <URIPath> מציין למדיניות ExtractVariables לחלץ מידע מנתיב ה-URI. הרכיב
<Pattern> מציין את התבנית להחלה על נתיב ה-URI. התבנית
מטופלת כתבנית פשוטה, והסוגריים המסולסלים מציינים את החלק המשתנה
בנתיב ה-URI.
השם של המשתנה שיוגדר נקבע לפי הערך שצוין באלמנט <VariablePrefix>, וגם לפי הערך שמוקף בסוגריים מסולסלים {} באלמנט <Pattern>. שני הערכים מחוברים באמצעות נקודה ביניהם, ולכן שם המשתנה יהיה urirequest.id, לדוגמה. אם אין רכיב <VariablePrefix>, שם המשתנה הוא רק הערך שמוקף בסוגריים מסולסלים.
נבחן את קוד המדיניות לדוגמה שלמעלה, שפועל עם הבקשה הנכנסת הבאה:
GET http://example.com/svc1/accounts/12797282
נניח ש-basepath של ה-API Proxy הוא /svc1. כש-Apigee מחיל את קוד המדיניות ExtractVariables שלמעלה על הבקשה הנכנסת הזו, הוא מגדיר את המשתנה urirequest.id לערך 12797282. אחרי שמערכת Apigee מפעילה את המדיניות, מדיניות או קוד בהמשך תהליך העיבוד יכולים להתייחס למשתנה בשם urirequest.id כדי לקבל את ערך המחרוזת 12797282.
לדוגמה, מדיניות AssignMessage הבאה מטמיעה את הערך של המשתנה הזה במטען הייעודי (payload) של הודעת בקשה חדשה:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AssignPayload"> <DisplayName>AssignPayload</DisplayName> <Set> <Payload contentType="text/xml"> <IdExtractedFromURI>{urirequest.id}</IdExtractedFromURI> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo> </AssignMessage>
פרמטרים של שאילתה
<ExtractVariables name="ExtractVariables-2">
<DisplayName>Extract a value from a query parameter</DisplayName>
<Source>request</Source>
<QueryParam name="code">
<Pattern ignoreCase="true">DBN{dbncode}</Pattern>
</QueryParam>
<VariablePrefix>queryinfo</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>נבחן את קוד המדיניות לדוגמה שלמעלה, שפועל עם הבקשה הנכנסת הבאה:
GET http://example.com/accounts/12797282?code=DBN88271
כש-Apigee מחיל את קוד המדיניות ExtractVariables שלמעלה על הבקשה הנכנסת הזו,
הוא מגדיר את המשתנה queryinfo.dbncode לערך 88271. אחרי שמערכת Apigee
מבצעת את המדיניות, מדיניות או קוד בהמשך תהליך העיבוד יכולים להתייחס למשתנה בשם queryinfo.dbncode כדי לקבל את ערך המחרוזת 88271.
עכשיו אפשר לגשת למשתנה queryinfo.dbncode בפרוקסי.
לדוגמה, מדיניות AssignMessage הבאה מעתיקה את המשתנה למטען הייעודי (payload) של הבקשה:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetQP</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractQP>{queryinfo.dbncode}</ExtractQP> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
פרמטרים מרובים
<ExtractVariables name="ExtractVariables-2">
<DisplayName>Extract a value from a query parameter</DisplayName>
<Source>request</Source>
<QueryParam name="w">
<Pattern ignoreCase="true">{firstWeather}</Pattern>
</QueryParam>
<QueryParam name="w.2">
<Pattern ignoreCase="true">{secondWeather}</Pattern>
</QueryParam>
<VariablePrefix>queryinfo</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>נניח שעיצוב ה-API מאפשר לכם לציין כמה פרמטרים של שאילתות עם אותו שם. אפשר להשתמש במדיניות ExtractVariables כדי לחלץ את הערך של כמה מופעים של פרמטר השאילתה. כדי להפנות לפרמטרים של שאילתה עם אותו שם במדיניות, משתמשים באינדקסים שבהם למופע הראשון של פרמטר השאילתה אין אינדקס, השני הוא באינדקס 2, השלישי באינדקס 3 וכן הלאה.
נבחן את קוד המדיניות לדוגמה שלמעלה, שפועל עם הבקשה הנכנסת הבאה:
GET http://example.com/weather?w=Boston&w=Chicago
כש-Apigee מחיל את קוד המדיניות ExtractVariables שלמעלה על הבקשה הנכנסת הזו,
הוא מגדיר את המשתנה queryinfo.firstWeather לערך Boston ואת
המשתנה queryInfo.secondWeather לערך Chicago.
עכשיו יש לך גישה למשתנה queryinfo.firstWeather ולמשתנה queryinfo.secondWeather בפרוקסי. לדוגמה, מדיניות AssignMessage הבאה מעתיקה את המטען הייעודי (payload) לבקשה:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetQP</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractQP1>{queryinfo.firstWeather}</ExtractQP1> <ExtractQP2>{queryinfo.secondWeather}</ExtractQP2> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
כותרות
<ExtractVariables name='ExtractVariable-OauthToken'>
<Source>request</Source>
<Header name="Authorization">
<Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
</Header>
<VariablePrefix>clientrequest</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>נניח שממשק ה-API שלכם משתמש באסימוני Bearer של OAuth v2.0. נניח שקוד המדיניות לדוגמה שלמעלה פועל עם בקשה שכוללת טוקן OAuth v2.0 עם כותרת כמו זו:
Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.
נניח שאתם מעצבי ה-API ורוצים להשתמש בערך הטוקן (אבל לא בכל הכותרת) כמפתח בחיפוש במטמון. אפשר להשתמש בקוד המדיניות ExtractVariables שמופיע למעלה כדי לחלץ את האסימון.
כש-Apigee מחיל את קוד המדיניות ExtractVariables שלמעלה על הכותרת הזו, הוא מגדיר את המשתנה clientrequest.oauthtoken לערך TU08xptfFfeM7aS0xHqlxTgEAdAM.
עכשיו יש לך גישה למשתנה clientrequest.oauthtoken בפרוקסי. לדוגמה, מדיניות AssignMessage הבאה מעתיקה את המשתנה למטען הייעודי (payload) של הבקשה:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetHeader</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractHeader>{clientrequest.oauthtoken}</ExtractHeader> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
JSON
<ExtractVariables name="ExtractVariables-3"> <Source>response</Source> <JSONPayload> <Variable name="latitude" type="float"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude" type="float"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> <VariablePrefix>geocoderesponse</VariablePrefix> </ExtractVariables>
כדאי לעיין במטען הייעודי (payload) של תגובת ה-JSON הבאה:
{ "results": [{ "geometry": { "location": { "lat": 37.42291810, "lng": -122.08542120 }, "location_type": "ROOFTOP", "viewport": { "northeast": { "lat": 37.42426708029149, "lng": -122.0840722197085 }, "southwest": { "lat": 37.42156911970850, "lng": -122.0867701802915 } } } }] }
כש-Apigee מחיל את קוד המדיניות ExtractVariables שלמעלה על הודעת ה-JSON הזו, הוא מגדיר שני משתנים: geocoderesponse.latitude ו-geocoderesponse.longitude. בשני המשתנים האלה משתמשים באותה תחילית של משתנה, שהיא geocoderesponse. הסיומת של המשתנים האלה מצוינת במפורש במאפיין name של רכיב <Variable>.
המשתנה geocoderesponse.latitude מקבל את הערך 37.42291810. המשתנה geocoderesponse.longitude מקבל את הערך -122.08542120.
עכשיו יש לך גישה למשתנה geocoderesponse.latitude בפרוקסי. לדוגמה, מדיניות AssignMessage הבאה מעתיקה את הערך לכותרת בשם latitude בתגובה:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetJSONVar</DisplayName> <Add> <Headers> <Header name="latitude">{geocoderesponse.latitude}</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
XML
<ExtractVariables name="ExtractVariables-4"> <Source>response</Source> <XMLPayload> <Namespaces> <Namespace prefix="dir">urn:43BFF88D-D204-4427-B6BA-140AF393142F</Namespace> </Namespaces> <Variable name="travelmode" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/@mode</XPath> </Variable> <Variable name="duration" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:value</XPath> </Variable> <Variable name="timeunit" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:text</XPath> </Variable> </XMLPayload> <VariablePrefix>directionsresponse</VariablePrefix> </ExtractVariables>
כדאי לעיין במטען הייעודי (payload) של תגובת ה-XML הבאה:
<Directions xmlns="urn:43BFF88D-D204-4427-B6BA-140AF393142F">
<status>OK</status>
<route>
<summary>I-40 W</summary>
<leg>
<step mode="DRIVING">
<start_location>
<lat>41.8507300</lat>
<lng>-87.6512600</lng>
</start_location>
<end_location>
<lat>41.8525800</lat>
<lng>-87.6514100</lng>
</end_location>
<duration>
<value>19</value>
<text>minutes</text>
</duration>
</step>
</leg>
</route>
</Directions>כש-Apigee מחיל את קוד המדיניות ExtractVariables שלמעלה על הודעת ה-XML הזו, הוא מגדיר שלושה משתנים:
-
directionsresponse.travelmode: קבלת הערךDRIVING -
directionsresponse.duration: קבלת הערך19 -
directionsresponse.timeunit: קבלת הערךminutes
כל המשתנים משתמשים באותה תחילית משתנה, directionsresponse. הסיומת של המשתנים האלה מצוינת במפורש במאפיין name של רכיב <Variable>.
עכשיו יש לך גישה למשתנה directionresponse.travelmode בפרוקסי. לדוגמה, מדיניות AssignMessage הבאה מעתיקה את ההודעה לכותרת בשם tmode בתגובה:
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetXMLVar</DisplayName> <Add> <Headers> <Header name="tmode">{directionsresponse.travelmode}</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
היקף המשתנה
למשתנים שמוגדרים באמצעות המדיניות ExtractVariables יש היקף גלובלי. כלומר, אחרי שמדיניות ExtractVariables מגדירה משתנה חדש, אפשר לגשת למשתנה הזה מכל מדיניות או קוד בכל שלב בזרימת העבודה שמופעל אחרי מדיניות ExtractVariables. זה כולל:
- PreFlow: ProxyEndpoint ו-TargetEndpoint (בקשה ותגובה)
- PostFlow: ProxyEndpoint ו-TargetEndpoint (בקשה ותגובה)
- PostClientFlow: ProxyEndpoint (תגובה בלבד, באמצעות מדיניות MessageLogging>)
- Error Flows
התאמה ויצירת משתנים
המדיניות ExtractVariables מחלצת מידע מבקשה או מתגובה וכותבת את המידע הזה למשתנה. לכל סוג מידע שאפשר לחלץ, כמו נתוני XML או נתיב URI, מציינים את התבנית להתאמה ואת שם המשתנה שמשמש להחזקת המידע שחולץ.
עם זאת, אופן ההתאמה לתבנית תלוי במקור החילוץ. בקטעים הבאים מתוארות שתי הקטגוריות הבסיסיות של מידע שאפשר לחלץ.
התאמה של נתיבי URI, פרמטרים של שאילתות, כותרות, פרמטרים של טפסים ומשתנים
כשמחפשים מידע בנתיב URI, בפרמטרים של שאילתה, בכותרות, בפרמטרים של טופס ובמשתנים, משתמשים בתג <Pattern> כדי לציין דפוס אחד או יותר להתאמה. לדוגמה, בדוגמה הבאה למדיניות מוצגת תבנית התאמה יחידה לנתיב ה-URI:
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>בדוגמה הזו, המשתנה urirequest.pathSeg מוגדר לכל מה שמופיע ב-proxy.pathsuffix אחרי /a/. לדוגמה, נניח שנתיב הבסיס של ה-API Proxy הוא /basepath/v1 . בבקשה נכנסת
ל-http://myCo.com/basepath/v1/a/b המשתנה
מוגדר ל-b.
ציון של כמה דפוסים
אפשר לציין כמה תבניות להתאמה, שמתאימות לתגי <Pattern>, כאשר:
- כל התבניות נבדקות להתאמה.
- אם אף אחת מהתבניות לא תואמת, המדיניות לא עושה כלום והמשתנה או המשתנים לא נוצרים.
- אם יותר מתבנית אחת תואמת, התבנית עם פלחי הנתיב הארוכים ביותר משמשת לחילוץ.
- אם לשתי תבניות תואמות יש את אותם פלחים של הנתיב הארוך ביותר, המערכת משתמשת בתבנית שצוינה ראשונה במדיניות לצורך החילוץ.
בדוגמה הבאה, יוצרים מדיניות שמכילה שלושה דפוסי התאמה לנתיב ה-URI:
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
<Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
<Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>נניח שיש proxy ל-API עם נתיב בסיס /basepath/v1, וכתובת ה-URL של הבקשה הנכנסת ל-proxy ל-API היא מהצורה הבאה:
http://myCo.com/basepath/v1/a/b
בדוגמה הזו, התבנית הראשונה תואמת למזהה המשאבים האחיד (URI) והמשתנה urirequest.pathSeg מוגדר ל-b.
אם כתובת ה-URL של הבקשה היא:
http://myCo.com/basepath/v1/a/b/c/d
…אז התבנית השלישית מתאימה והמשתנה urirequest.pathSeg מוגדר ל-d.
ציון תבניות עם כמה משתנים
אפשר לציין כמה משתנים בתבנית ההתאמה. לדוגמה, אתם מציינים תבנית התאמה עם שני משתנים:
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
<Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
<Pattern ignoreCase="true">/a/{pathSeg1}/c/{pathSeg2}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>שוב , נניח שיש proxy ל-API עם נתיב בסיס /basepath/v1. כתובת ה-URL של הבקשה הנכנסת:
http://myCo.com/basepath/v1/a/b/c/d
…המשתנה urirequest.pathSeg1 מוגדר כ-b והמשתנה urirequest.pathSeg2 מוגדר כ-d.
התאמה של כמה מופעים בתבנית
אפשר גם להתאים תבניות כשיש כמה מופעים של פריט עם אותו שם. לדוגמה, אפשר לשלוח בקשה שמכילה כמה פרמטרים של שאילתות או כמה כותרות עם אותו שם. הבקשה הבאה מכילה שני פרמטרים של שאילתה בשם w:
http://myCo.com/basepath/v1/a/b/c/d?w=1&w=2
כדי להפנות לפרמטרים האלה של השאילתה במדיניות ExtractVariables, משתמשים באינדקסים. המופע הראשון של פרמטר השאילתה לא מקבל אינדקס, המופע השני מקבל את אינדקס 2, המופע השלישי מקבל את אינדקס 3 וכן הלאה. לדוגמה, המדיניות הבאה מחלצת את הערך של פרמטר השאילתה השני שנקרא w בבקשה:
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<QueryParam name="w.2">
<Pattern ignoreCase="true">{secondW}</Pattern>
</QueryParam>
<VariablePrefix>urirequest</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>המשתנה urirequest.secondW מוגדר עם הערך '2'. אם הפרמטר השני של השאילתה לא מצוין בבקשה, המשתנה urirequest.secondW ריק. משתמשים באינדקס בכל פעם שיש כמה פריטים עם אותו שם בבקשה.
שימוש בתווים מיוחדים בתבנית
כשמבצעים התאמה של נתיבי URI, אפשר להשתמש בתווים הכלליים לחיפוש '*' ו-'**' בדפוס, כאשר:
- '*' תואם לכל אחד מהפלחים בנתיב
- "**" תואם לכמה פלחים בנתיב
לדוגמה, אפשר לציין תבניות לרכיב <URIPath> כמו שמוצג בהמשך:
<URIPath>
<Pattern ignoreCase="true">/a/*/{id}</Pattern>
<Pattern ignoreCase="true">/a/**/{id}</Pattern>
</URIPath>התבנית הראשונה מתאימה לבקשות עם סיומות נתיב (החלק של נתיב ה-URI אחרי נתיב הבסיס), כמו /a/b/c, /a/foo/bar וכו'. התבנית השנייה מתאימה לכל מספר של מקטעי נתיב אחרי /a/, כמו /a/foo/bar/baz/c, וגם ל-/a/b/c ול-/a/foo/bar.
כשמציינים תבניות לפרמטרים של שאילתות, לכותרות ולפרמטרים של טפסים, התו '*' מציין התאמה למספר כלשהו של תווים. לדוגמה, כשמתאימים כותרת, מציינים את התבנית כך:
*;charset={encoding}התבנית הזו תואמת לערכים text/xml;charset=UTF-16 ו-application/xml;charset=ASCII.
אם הערך שמועבר למדיניות ExtractVariables מכיל תו מיוחד, כמו {, צריך להשתמש בתו % כדי לסמן אותו בתו בריחה (escape). בדוגמה הבאה, התווים { ו-} מופיעים בתבנית עם escape כי הם משמשים כתווים ליטרליים בערך של פרמטר השאילתה:
<QueryParam>
<Pattern ignoreCase="true">%{user%} {name}</Pattern>
</QueryParam>בדוגמה הזו, התבנית תואמת לערך {user} Steve אבל לא לערך user Steve.
התאמה בין JSON ל-XML
כשמחלצים נתונים מ-JSON ומ-XML, מציינים תג אחד או יותר של <Variable>
במדיניות.
התג <Variable> מציין את השם של משתנה היעד שבו מאוחסן המידע שחולץ, ואת JsonPath (JSON) או XPATH (XML) למידע שחולץ.
כל התגים <Variable> במדיניות מוערכים, כך שאפשר לאכלס כמה משתנים ממדיניות אחת. אם התווית <Variable> לא מוערכת כשדה תקין ב-JSON או ב-XML, המשתנה המתאים לא נוצר.
בדוגמה הבאה מוצגת מדיניות ExtractVariables שמאכלסת שתי משתנים מגוף ה-JSON של תגובה:
<ExtractVariables name="ExtractVariables-3"> <Source>response</Source> <JSONPayload> <Variable name="latitude" type="float"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude" type="float"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> <VariablePrefix>geocoderesponse</VariablePrefix> </ExtractVariables>
כתיבה לאותו משתנה בכמה מקומות
חשוב לבחור בקפידה את שמות המשתנים שרוצים להגדיר. המדיניות מופעלת באופן רציף מהדפוס הראשון של החילוץ ועד האחרון. אם המדיניות כותבת ערך לאותו משתנה מכמה מקומות, הכתיבה האחרונה במדיניות קובעת את ערך המשתנה. (יכול להיות שזה מה שחיפשת.)
לדוגמה, אתם רוצים לחלץ ערך של טוקן שאפשר להעביר אותו בפרמטר שאילתה או בכותרת, כמו שמוצג בהמשך:
<!-- If token only in query param, the query param determines the value.
If token is found in both the query param and header, header sets value. -->
<QueryParam name="token">
<Pattern ignoreCase="true">{tokenValue}</Pattern>
</QueryParam>
<!-- Overwrite tokenValue even if it was found in query parameter. -->
<Header name="Token">
<Pattern ignoreCase="true">{tokenValue}</Pattern>
</Header>שליטה בפעולות שמתבצעות כשאין התאמה
אם הדפוס לא תואם, המשתנה המתאים לא נוצר. לכן, אם משתנה מוזכר במדיניות אחרת, יכולה להתרחש שגיאה.
אפשרות אחת היא להגדיר את <IgnoreUnresolvedVariables> כ-true במדיניות שמפנה למשתנה, כדי להגדיר את המדיניות כך שתתייחס לכל משתנה שלא ניתן לפתור כמחרוזת ריקה (null):
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
הפניה לרכיב
ההפניה לרכיב מתארת את הרכיבים והמאפיינים של מדיניות ExtractVariables.
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1"> <DisplayName> 1</DisplayName> <Source clearPayload="true|false">request</Source> <VariablePrefix>myprefix</VariablePrefix> <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <URIPath> <Pattern ignoreCase="false">/accounts/{id}</Pattern> </URIPath> <QueryParam name="code"> <Pattern ignoreCase="true">DBN{dbncode}</Pattern> </QueryParam> <Header name="Authorization"> <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern> </Header> <FormParam name="greeting"> <Pattern>hello {user}</Pattern> </FormParam> <Variable name="request.content"> <Pattern>hello {user}</Pattern> </Variable> <JSONPayload> <Variable name="name"> <JSONPath>{example}</JSONPath> </Variable> </JSONPayload> <XMLPayload stopPayloadProcessing="false"> <Namespaces/> <Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable> </XMLPayload> </ExtractVariables>
מאפיינים של <ExtractVariables>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
בטבלה הבאה מתוארים מאפיינים שמשותפים לכל רכיבי ההורה של המדיניות:
| מאפיין | תיאור | ברירת מחדל | נוכחות |
|---|---|---|---|
name |
השם הפנימי של המדיניות. הערך של מאפיין אפשר להשתמש ברכיב |
לא רלוונטי | חובה |
continueOnError |
מגדירים את הערך הגדרה ל- |
FALSE | אופציונלי |
enabled |
מגדירים את המדיניות למצב מגדירים את הערך |
TRUE | אופציונלי |
async |
המאפיין הזה הוצא משימוש. |
FALSE | הוצא משימוש |
אלמנט <DisplayName>
משתמשים בו בנוסף למאפיין name כדי לתת למדיניות שם אחר בשפה טבעית, לסימון המדיניות בכלי לעריכת פרוקסי בממשק המשתמש לניהול.
<DisplayName>Policy Display Name</DisplayName>
| ברירת מחדל |
לא רלוונטי אם לא מציינים את הרכיב הזה, המערכת משתמשת בערך של המאפיין |
|---|---|
| נוכחות | אופציונלי |
| סוג | String |
אלמנט <Source>
(אופציונלי) מציינים את המשתנה שיש לנתח. ערך ברירת המחדל של <Source> הוא message. הערך message תלוי בהקשר. בתהליך בקשה, message מייצג את הודעת הבקשה. בזרימת תגובה, message נפתר להודעת התגובה.
לרוב משתמשים במדיניות הזו כדי לחלץ מידע מהודעת בקשה או תגובה, אבל אפשר להשתמש בה כדי לחלץ מידע מכל משתנה. לדוגמה, אפשר להשתמש בה כדי לחלץ מידע מישות שנוצרה על ידי מדיניות AccessEntity, מנתונים שהוחזרו על ידי מדיניות ServiceCallout, או לחלץ מידע מאובייקט XML או JSON.
אם לא ניתן לפתור את <Source>, או אם הפתרון הוא לא מסוג הודעה,
המדיניות לא תגיב.
<Source clearPayload="true|false">request</Source>
| ברירת מחדל: | מֶסֶר |
| נוכחות: | אופציונלי |
| סוג: | String |
מאפיינים
| מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
|---|---|---|---|---|
clearPayload |
אם רוצים לנקות את המטען הייעודי שצוין ב- משתמשים באפשרות |
FALSE |
אופציונלי | בוליאני |
אלמנט <VariablePrefix>
(אופציונלי) השם המלא של המשתנה נוצר על ידי צירוף של <VariablePrefix>, נקודה והשם שמוגדר בסוגריים מסולסלים {} ברכיב <Pattern> או ברכיב <Variable>. לדוגמה:
myprefix.id, myprefix.dbncode או myprefix.oauthtoken.
<VariablePrefix>myprefix</VariablePrefix>
לדוגמה, נניח שהערך של name הוא user.
- אם לא מציינים את
<VariablePrefix>, הערכים שחולצו מוקצים למשתנה בשםuser. - אם מציינים את
<VariablePrefix>בתור myprefix, הערכים שחולצו מוקצים למשתנה בשםmyprefix.user.
| ברירת מחדל: | לא רלוונטי |
| נוכחות: | אופציונלי |
| סוג: | String |
אלמנט <IgnoreUnresolvedVariables>
(אופציונלי) מגדירים את הערך true כדי להתייחס לכל משתנה שלא ניתן לפתור כמחרוזת ריקה (null). מגדירים את הערך false אם רוצים שהמדיניות תקפיץ הודעת שגיאה כשלא ניתן לפתור משתנה כלשהו שמופיע בהפניה.
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
| ברירת מחדל: | לא נכון |
| נוכחות: | אופציונלי |
| סוג: | בוליאני |
אלמנט <URIPath>
(אופציונלי, אבל מידע נוסף מופיע בשורה 'נוכחות' בטבלה שלמטה). מחזירה ערך
מ-proxy.pathsuffix של הודעת מקור request. הנתיב שחל על התבנית הוא proxy.pathsuffix, שלא כולל את basepath של ה-API Proxy. אם הודעת המקור היא מסוג response, האלמנט הזה לא עושה כלום.
<URIPath>
<Pattern ignoreCase="false">/accounts/{id}</Pattern>
</URIPath>אפשר להשתמש בכמה רכיבי <Pattern>:
<URIPath>
<Pattern ignoreCase="false">/accounts/{id}</Pattern>
<Pattern ignoreCase="false">/accounts/{id}/transactions/{index}</Pattern>
</URIPath>| ברירת מחדל: | לא רלוונטי |
| נוכחות: | זה שינוי אופציונלי. עם זאת, אתם צריכים לכלול לפחות אחד מהמאפיינים הבאים:
<URIPath>, <QueryParam>, <Header>,
<FormParam>, <JSONPayload> או
<XMLPayload>. |
| סוג: | לא רלוונטי |
מאפיינים
| מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
|---|---|---|---|---|
| ignoreCase | הגדרה של התעלמות מאותיות רישיות כשמתאימים את התבנית. |
FALSE |
אופציונלי | בוליאני |
אלמנט <QueryParam>
(אופציונלי, אבל מידע נוסף מופיע בשורה 'נוכחות' בטבלה שלמטה). מחלצת ערך
מפרמטר השאילתה שצוין בהודעת מקור request. אם הודעת המקור היא מסוג response, האלמנט הזה לא עושה כלום.
<QueryParam name="code">
<Pattern ignoreCase="true">DBN{dbncode}</Pattern>
</QueryParam>אם לכמה פרמטרים של שאילתה יש אותו שם, צריך להשתמש באינדקסים כדי להפנות לפרמטרים:
<QueryParam name="w.2">
<Pattern ignoreCase="true">{secondW}</Pattern>
</QueryParam>| ברירת מחדל: | לא רלוונטי |
| נוכחות: | זה שינוי אופציונלי. עם זאת, אתם צריכים לכלול לפחות אחד מהמאפיינים הבאים:
<URIPath>, <QueryParam>, <Header>,
<FormParam>, <JSONPayload> או
<XMLPayload>. |
| סוג: | לא רלוונטי |
מאפיינים
| מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
|---|---|---|---|---|
| name | מציינים את השם של פרמטר השאילתה. אם לכמה פרמטרים של שאילתה יש את אותו שם, צריך להשתמש בהפניה עם אינדקס. המופע הראשון של פרמטר השאילתה לא מקבל אינדקס, המופע השני מקבל אינדקס 2, המופע השלישי מקבל אינדקס 3 וכן הלאה. |
לא רלוונטי |
חובה | String |
אלמנט <Header>
(אופציונלי, אבל מידע נוסף מופיע בשורה 'נוכחות' בטבלה שלמטה). הפונקציה מחלצת ערך
מכותרת ה-HTTP שצוינה של ההודעה request או response שצוינה. אם לכמה כותרות יש את אותו שם, הערכים שלהן מאוחסנים במערך.
<!-- The name is the actual header name. --> <Header name="Authorization"> <!-- Provide a name for your new custom variable here. --> <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern> </Header>
אם לכמה כותרות יש את אותו שם, צריך להשתמש באינדקסים כדי להפנות לכותרות ספציפיות במערך:
<Header name="myHeader.2">
<Pattern ignoreCase="true">{secondHeader}</Pattern>
</Header>או את הפקודה הבאה כדי להציג רשימה של כל הכותרות במערך:
<Header name="myHeader.values">
<Pattern ignoreCase="true">{myHeaders}</Pattern>
</Header>| ברירת מחדל: | לא רלוונטי |
| נוכחות: | זה שינוי אופציונלי. עם זאת, אתם צריכים לכלול לפחות אחד מהמאפיינים הבאים:
<URIPath>, <QueryParam>, <Header>,
<FormParam>, <JSONPayload> או
<XMLPayload>. |
| סוג: | לא רלוונטי |
מאפיינים
| מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
|---|---|---|---|---|
| name | מציינים את השם של הכותרת שממנה רוצים לחלץ את הערך. אם לכמה כותרות יש את אותו שם, צריך להשתמש בהפניה עם אינדקס. הכותרת הראשונה לא מקבלת אינדקס, השנייה מקבלת אינדקס 2, השלישית מקבלת אינדקס 3 וכן הלאה. אפשר להשתמש ב-.values כדי לקבל את כל הכותרות במערך. |
לא רלוונטי |
חובה | String |
אלמנט <FormParam>
(אופציונלי, אבל מידע נוסף מופיע בשורה 'נוכחות' בטבלה שלמטה). מחלצת ערך מפרמטר הטופס שצוין בהודעה request או response שצוינה. אפשר לחלץ פרמטרים של טופס רק אם הכותרת Content-Type של ההודעה שצוינה היא application/x-www-form-urlencoded.
<FormParam name="greeting">
<Pattern>hello {user}</Pattern>
</FormParam>| ברירת מחדל: | לא רלוונטי |
| נוכחות: | זה שינוי אופציונלי. עם זאת, אתם צריכים לכלול לפחות אחד מהמאפיינים הבאים:
<URIPath>, <QueryParam>, <Header>,
<FormParam>, <JSONPayload> או
<XMLPayload>. |
| סוג: | לא רלוונטי |
מאפיינים
| מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
|---|---|---|---|---|
| name | שם הפרמטר של הטופס שממנו מחלצים את הערך. |
לא רלוונטי |
חובה | String |
אלמנט <Variable>
(אופציונלי, אבל מידע נוסף מופיע בשורה 'נוכחות' בטבלה שלמטה). מציין את השם של משתנה שממנו יחולץ ערך.
<Variable name="myVar">
<Pattern>hello {user}</Pattern>
</Variable>כדי לחלץ שני ערכים מהמשתנה:
<Variable name="myVar">
<Pattern>hello {firstName} {lastName}</Pattern>
</Variable>| ברירת מחדל: | לא רלוונטי |
| נוכחות: | זה שינוי אופציונלי. עם זאת, אתם צריכים לכלול לפחות אחד מהמאפיינים הבאים:
<URIPath>, <QueryParam>, <Header>,
<FormParam>, <JSONPayload> או
<XMLPayload>. |
| סוג: | לא רלוונטי |
מאפיינים
| מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
|---|---|---|---|---|
| name | השם של המשתנה שממנו רוצים לחלץ את הערך. |
לא רלוונטי |
חובה | String |
אלמנט <JSONPayload>
(אופציונלי, אבל מידע נוסף מופיע בשורה 'נוכחות' בטבלה שלמטה). מציין את ההודעה בפורמט JSON שממנה יחולץ ערך המשתנה. חילוץ JSON מתבצע רק כשהכותרת של Content-Type ההודעה היא application/json.
<JSONPayload> <Variable name="name" type="string"> <JSONPath>{example}</JSONPath> </Variable> </JSONPayload>
| ברירת מחדל: | לא רלוונטי |
| נוכחות: | זה שינוי אופציונלי. עם זאת, אתם צריכים לכלול לפחות אחד מהמאפיינים הבאים:
<URIPath>, <QueryParam>, <Header>,
<FormParam>, <JSONPayload> או
<XMLPayload>. |
| סוג: | לא רלוונטי |
אלמנט <JSONPayload>/<Variable>
(חובה ברכיב JSONPayload). מציין את המשתנה שאליו מוקצה הערך שחולץ. אפשר לכלול כמה תגי <Variable> ברכיב <JSONPayload> כדי לאכלס כמה משתנים.
<Variable name="name" type="string"> <JSONPath>{example}</JSONPath> </Variable>
| ברירת מחדל: | לא רלוונטי |
| נוכחות: | נדרש ברכיב JSONPayload. |
| סוג: | לא רלוונטי |
מאפיינים
| מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
|---|---|---|---|---|
| name |
מציינת את שם המשתנה שאליו יוקצה הערך שחולץ. |
name |
חובה | String |
| סוג | מציין את סוג הנתונים של ערך המשתנה. | לא רלוונטי | אופציונלי |
מחרוזת. בוחרים מבין האפשרויות הבאות:
|
אלמנט <JSONPayload>/<Variable>/<JSONPath>
(חובה בתוך הרכיב JSONPayload:Variable). מציין את נתיב ה-JSON שמשמש לחילוץ ערך מהודעה בפורמט JSON.
<Variable name="name"> <JSONPath>$.rss.channel.title</JSONPath> </Variable>
| ברירת מחדל: | לא רלוונטי |
| נוכחות: | חובה |
| סוג: | String |
אלמנט <XMLPayload>
(אופציונלי, אבל מידע נוסף מופיע בשורה 'נוכחות' בטבלה שלמטה). מציין את ההודעה בפורמט XML שממנה יחולץ ערך המשתנה. מטענים ייעודיים (payloads) בפורמט XML
מחולצים רק אם הכותרת Content-Type של ההודעה
היא text/xml, application/xml או application/*+xml.
<XMLPayload stopPayloadProcessing="false"> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> <Namespace prefix="gmail">http://mail.google.com</Namespace> </Namespaces> <Variable name="name" type="boolean"> <XPath>/apigee:test/apigee:example</XPath> </Variable> </XMLPayload>
| ברירת מחדל: | לא רלוונטי |
| נוכחות: | זה שינוי אופציונלי. עם זאת, אתם צריכים לכלול לפחות אחד מהמאפיינים הבאים:
<URIPath>, <QueryParam>, <Header>,
<FormParam>, <JSONPayload> או
<XMLPayload>. |
| סוג: | לא רלוונטי |
מאפיינים
| מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
|---|---|---|---|---|
stopPayloadProcessing |
הערך |
FALSE |
אופציונלי | בוליאני |
<XMLPayload>/<Namespaces> element
(אופציונלי) מציין את מרחב השמות שישמש בהערכת ה-XPath. אם אתם משתמשים במרחבי שמות בביטויי XPath, אתם צריכים להצהיר על מרחבי השמות כאן, כמו בדוגמה הבאה.
<XMLPayload stopPayloadProcessing="false"> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> <Namespace prefix="gmail">http://mail.google.com</Namespace> </Namespaces> <Variable name="legName" type="string"> <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath> </Variable> </XMLPayload>
אם אתם לא משתמשים במרחבי שמות בביטויי XPath, אתם יכולים להשמיט את הרכיב <Namespaces> או להוסיף לו הערה, כמו בדוגמה הבאה:
<XMLPayload stopPayloadProcessing="false"> <!-- <Namespaces/> --> <Variable name="legName" type="string"> <XPath>/Directions/route/leg/name</XPath> </Variable> </XMLPayload>
| ברירת מחדל: | לא רלוונטי |
| נוכחות: | אופציונלי |
| סוג: | String |
מאפיינים
| מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
|---|---|---|---|---|
prefix |
קידומת מרחב השמות. |
לא רלוונטי |
חובה | String |
אלמנט <XMLPayload>/<Variable>
(אופציונלי) מציינים את המשתנה שאליו יוקצה הערך שחולץ.
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
| ברירת מחדל: | לא רלוונטי |
| נוכחות: | אופציונלי |
| סוג: | לא רלוונטי |
מאפיינים
| מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
|---|---|---|---|---|
| name |
מציינת את שם המשתנה שאליו יוקצה הערך שחולץ. |
name |
חובה | String |
| סוג | מציין את סוג הנתונים של ערך המשתנה. | בוליאני | אופציונלי |
מחרוזת. בוחרים מבין האפשרויות הבאות:
|
רכיב <XMLPayload>/<Variable>/<XPath>
(חובה ברכיב XMLPayload:Variable) מציינים את ה-XPath שהוגדר למשתנה. יש תמיכה רק בביטויים של XPath 1.0.
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
דוגמה עם מרחב שמות. אם משתמשים במרחבי שמות בביטויי XPath, צריך להצהיר על מרחבי השמות בקטע <XMLPayload><Namespaces> של המדיניות.
<Variable name="name" type="boolean"> <XPath>/foo:test/foo:example</XPath> </Variable>
| ברירת מחדל: | לא רלוונטי |
| נוכחות: | חובה |
| סוג: | String |
הפניה לשגיאה
בקטע הזה מתוארים קודי השגיאות והודעות השגיאה שמוחזרים, ומשתני השגיאה שמוגדרים על ידי Apigee כשהמדיניות הזו מפעילה שגיאה. חשוב לדעת את המידע הזה אם אתם מפתחים כללי תקלות לטיפול בתקלות. מידע נוסף על שגיאות שקשורות למדיניות ועל טיפול בשגיאות
שגיאות זמן ריצה
השגיאות האלה יכולות להתרחש כשהמדיניות מופעלת.
| קוד תקלה | סטטוס HTTP | מטרה | תיקון |
|---|---|---|---|
steps.extractvariables.ExecutionFailed |
500 |
השגיאה הזו מתרחשת במקרים הבאים:
|
build |
steps.extractvariables.ImmutableVariable |
500 |
משתנה שמשמש במדיניות הוא בלתי ניתן לשינוי. המדיניות לא הצליחה להגדיר את המשתנה הזה. | לא רלוונטי |
steps.extractvariables.InvalidJSONPath |
500 |
השגיאה הזו מתרחשת אם נעשה שימוש בנתיב JSON לא תקין ברכיב JSONPath של המדיניות. לדוגמה, אם מטען ייעודי (payload) של JSON לא מכיל את האובייקט Name, אבל מציינים את Name כנתיב במדיניות, השגיאה הזו תופיע. |
build |
steps.extractvariables.JsonPathParsingFailure |
500 |
השגיאה הזו מתרחשת כשהמדיניות לא מצליחה לנתח נתיב JSON ולחלץ נתונים ממשתנה הזרימה שצוין ברכיב Source. בדרך כלל זה קורה אם משתנה הזרימה שצוין ברכיב Source לא קיים בזרימה הנוכחית. |
build |
steps.extractvariables.SetVariableFailed |
500 |
השגיאה הזו מתרחשת אם המדיניות לא הצליחה להגדיר את הערך למשתנה. השגיאה מתרחשת בדרך כלל אם מנסים להקצות ערכים לכמה משתנים שהשמות שלהם מתחילים באותן מילים בפורמט מקונן שמופרד באמצעות נקודות. | build |
steps.extractvariables.SourceMessageNotAvailable |
500 |
השגיאה הזו מתרחשת אם המשתנה message
שצוין ברכיב Source של המדיניות
הוא אחד מהבאים:
|
build |
steps.extractvariables.UnableToCast |
500 |
השגיאה הזו מתרחשת אם המדיניות לא הצליחה להמיר את הערך שחולץ למשתנה. בדרך כלל זה קורה כשמנסים להגדיר את הערך של סוג נתונים אחד למשתנה של סוג נתונים אחר. | build |
שגיאות פריסה
השגיאות האלה יכולות להתרחש כשפורסים שרת proxy שמכיל את המדיניות הזו.
| שם השגיאה | מטרה | תיקון |
|---|---|---|
NothingToExtract |
אם במדיניות לא מופיעים אף אחד מהרכיבים URIPath, QueryParam,
Header, FormParam, XMLPayload או JSONPayload,
פריסת ה-API Proxy תיכשל כי אין מה לחלץ. |
build |
NONEmptyPrefixMappedToEmptyURI |
השגיאה הזו מתרחשת אם למדיניות יש קידומת שמוגדרת ברכיב Namespace מתחת לרכיב XMLPayload, אבל לא מוגדר URI. |
build |
DuplicatePrefix |
השגיאה הזו מתרחשת אם לאותה מדיניות מוגדר אותו קידומת יותר מפעם אחת ברכיב Namespace שמתחת לרכיב XMLPayload. |
build |
NoXPathsToEvaluate |
אם למדיניות אין את הרכיב XPath בתוך הרכיב XMLPayload, ה-Deployment (פריסה) של ה-proxy ל-API נכשל עם השגיאה הזו.
|
build |
EmptyXPathExpression |
אם למדיניות יש ביטוי XPath ריק בתוך הרכיב XMLPayload, הפריסה של proxy ל-API נכשלת. |
build |
NoJSONPathsToEvaluate |
אם למדיניות אין את הרכיב JSONPath בתוך הרכיב JSONPayload, פריסת ה-proxy ל-API נכשלת עם השגיאה הזו. |
build |
EmptyJSONPathExpression |
אם למדיניות יש ביטוי XPath ריק בתוך הרכיב XMLPayload, הפריסה של proxy ל-API נכשלת. |
build |
MissingName |
אם למדיניות אין את המאפיין name באף אחד מרכיבי המדיניות כמו QueryParam, Header, FormParam או Variable, במקום שבו הוא נדרש, ה-Deployment (פריסה) של ה-proxy ל-API נכשל. |
build |
PatternWithoutVariable |
אם במדיניות לא מצוין משתנה ברכיב Pattern, פריסת proxy ל-API תיכשל. רכיב Pattern דורש את שם המשתנה שבו יאוחסנו הנתונים שחולצו. |
build |
CannotBeConvertedToNodeset |
אם במדיניות יש ביטוי XPath שבו הסוג Variable מוגדר כ-nodeset, אבל אי אפשר להמיר את הביטוי ל-nodeset, הפריסה של proxy ל-API תיכשל. |
build |
JSONPathCompilationFailed |
המדיניות לא הצליחה לקמפל נתיב JSON שצוין. | לא רלוונטי |
InstantiationFailed |
לא ניתן ליצור מופע של המדיניות. | לא רלוונטי |
XPathCompilationFailed |
אם הקידומת או הערך שמשמשים ברכיב XPath לא שייכים לאף אחד ממרחבי השמות שהוגדרו במדיניות, הפריסה של proxy ל-API תיכשל. |
build |
InvalidPattern |
אם ההגדרה של הרכיב Pattern לא תקינה באף אחד מהרכיבים כמו URIPath,
QueryParam, Header, FormParam, XMLPayload
או JSONPayload במדיניות, הפריסה של
ה-proxy ל-API תיכשל.
|
build |
משתני תקלות
המשתנים האלה מוגדרים כשהמדיניות הזו מפעילה שגיאה בזמן הריצה. מידע נוסף על שגיאות שקשורות למדיניות
| משתנים | כאשר: | דוגמה |
|---|---|---|
fault.name="fault_name" |
fault_name הוא שם התקלה, כפי שמופיע בטבלה שגיאות בזמן ריצה שלמעלה. שם התקלה הוא החלק האחרון של קוד התקלה. | fault.name = "SourceMessageNotAvailable" |
extractvariables.policy_name.failed |
policy_name הוא השם שהמשתמש נתן למדיניות שגרמה לשגיאה. | extractvariables.EV-ParseJsonResponse.failed = true |
דוגמה לתגובת שגיאה
{ "fault":{ "detail":{ "errorcode":"steps.extractvariables.SourceMessageNotAvailable" }, "faultstring":"request message is not available for ExtractVariable: EV-ParseJsonResponse" } }
דוגמה לכלל שגיאה
<FaultRule name="Extract Variable Faults"> <Step> <Name>AM-CustomErrorMessage</Name> <Condition>(fault.name = "SourceMessageNotAvailable") </Condition> </Step> <Condition>(extractvariables.EM-ParseJsonResponse.failed = true) </Condition> </FaultRule>