מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע

מה
המדיניות tractVariables מחלצת תוכן מבקשה או מתגובה ומגדירה את הערך של משתנה לתוכן הזה. אפשר לחלץ כל חלק מההודעה, כולל כותרות, נתיבי URI, מטענים ייעודיים של JSON/XML, טופס ופרמטרים של שאילתות. כדי להשתמש במדיניות הזו, המערכת מחילה תבנית טקסט על ההודעה וכשמוצאים התאמה, הוא מגדיר משתנה עם תוכן ההודעה שצוין.
המדיניות הזו משמשת לעיתים קרובות כדי לחלץ מידע מבקשה או מהודעת תשובה, אבל יכול להשתמש בו גם כדי לחלץ מידע ממקורות אחרים, כולל ישויות שנוצרו על ידי מדיניות AccessEntity, אובייקטים של XML או אובייקטים של JSON.
אחרי שחולצים את תוכן ההודעה שצוין, אפשר להפנות למשתנה המדיניות כחלק מעיבוד בקשה ותגובה.
סרטונים
כדי לקבל מידע נוסף על המדיניות extractVariables, מומלץ לצפות בסרטונים הבאים.
וידאו | תיאור |
---|---|
חילוץ משתנים ממטענים ייעודיים (payload) של XML | אפשר לחלץ משתנים ממטען ייעודי (payload) של XML באמצעות המדיניות חילוץ משתנה. |
חילוץ משתנים מ-JSON payload | אפשר לחלץ משתנים ממטען ייעודי (payload) של JSON באמצעות המדיניות חילוץ משתנה. |
חילוץ משתנים מפרמטרים | אפשר לחלץ משתנים מפרמטרים, כמו פרמטרים של שאילתה, כותרת, טופס או URI. |
חילוץ משתנים מפרמטרים מרובי ערכים | חילוץ משתנים מפרמטרים מרובי ערכים. |
חילוץ משתנים מפרמטר השאילתה (Classic Edge) | אפשר לחלץ משתנים מפרמטר של שאילתה באמצעות ממשק המשתמש של Classic Edge. |
חילוץ משתנים ממטענים ייעודיים (payload) של XML או JSON (Classic Edge) | אפשר לחלץ משתנים ממטען ייעודי (payload) של XML או JSON באמצעות ממשק המשתמש של Classic Edge. |
דוגמאות
הדוגמאות האלה של קוד מדיניות ממחישות איך לחלץ משתנים מהסוגים הבאים של ארטיפקטים:
GitHub
הקישורים האלה מפנים לדוגמאות פעילות של שרתי proxy ל-API, שאפשר לפרוס ולהפעיל ב-Edge. הם משתמשים ב-extractVariables וממוקמים במאגר api-platform-samples של Apigee GitHub. ב-README מוסבר כיצד נעשה שימוש ב-CSVVariables בכל מקרה, ואיך לפרוס נריץ כל דגימה.
- חילוץ ולהקצות דגימה של משתנים (חילוץ נתונים מהודעות JSON ו-XML)
- גישה דגימת ישות
- חלוקה לדפים ודוגמה לשמירה במטמון
- שינוי מסלול דוגמה של כתובת URL של יעד
- דוגמה למיזוג תכנים במדיניות
מזהי 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>
מציין את
מדיניות tractVariables לחילוץ מידע מנתיב ה-URI.
הרכיב <Pattern>
מציין את הדפוס שיש להחיל על נתיב ה-URI.
המערכת מתייחסת לתבנית פשוטה, עם הסוגריים המסולסלים שמציינים את החלק המשתנה
של נתיב ה-URI.
שם המשתנה שיוגדר נקבע על ידי הערך שיצוין בעמודה
הרכיב <VariablePrefix>
, וגם הערך שמוקף בסוגריים מסולסלים {}
ברכיב <Pattern>
. שני הערכים מחוברים באמצעות נקודה שחוצה אותה,
התוצאה היא שם המשתנה urirequest.id
, לדוגמה. אם לא
רכיב <VariablePrefix>
, אז שם המשתנה הוא רק הערך
מוקפים בסוגריים מסולסלים.
קוד המדיניות לדוגמה שלמעלה מתאים לטיפול בבקשה הנכנסת הבאה:
GET http://org1-test.apigee.net/svc1/accounts/12797282
נניח שהנתיב הבסיסי של שרת ה-proxy ל-API הוא /svc1
. כש-Apigee Edge מחיל את
בקוד המדיניות extractVariables שלמעלה לבקשה הנכנסת הזו, הוא מגדיר את המשתנה
urirequest.id
עד 12797282
. אחרי ש-Apigee Edge יריץ את המדיניות,
כללי המדיניות הבאים או הקוד בתהליך העיבוד יכולים להתייחס למשתנה ששמו
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://org1-test.apigee.net/accounts/12797282?code=DBN88271
כש-Apigee Edge מחיל את קוד המדיניות extractVariables שלמעלה על הבקשה הנכנסת הזו,
היא מגדירה את המשתנה queryinfo.dbncode
ל-88271
. אחרי Apigee Edge
מפעיל את המדיניות, כללי מדיניות נוספים או הקוד בתהליך העיבוד יכולים להתייחס
משתנה בשם queryinfo.dbncode
כדי לקבל את ערך המחרוזת 88271
.
עכשיו אפשר לגשת למשתנה queryinfo.dbncode
בשרת ה-proxy.
לדוגמה, המדיניות הבאה של 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 שלכם מאפשר לציין כמה פרמטרים של שאילתה עם אותם שם. אפשר להשתמש במדיניות הזו כדי לחלץ את הערך של מספר מופעים של השאילתה של הפרמטר 'w'. כדי להפנות לפרמטרים של השאילתות במדיניות חילוץVariables, צריך: משתמשים באינדקסים, כאשר המופע הראשון של פרמטר השאילתה לא מכיל אינדקס, השני נמצא ב- אינדקס 2, השלישי באינדקס 3 וכו'
קוד המדיניות לדוגמה שלמעלה מתאים לטיפול בבקשה הנכנסת הבאה:
GET http://org1-test.apigee.net/weather?w=Boston&w=Chicago
כש-Apigee Edge מחיל את קוד המדיניות extractVariables שלמעלה על הבקשה הנכנסת הזו,
הוא מגדיר את המשתנה queryinfo.firstWeather
ל-Boston
,
משתנה queryInfo.secondWeather
ל-Chicago
.
עכשיו אפשר לגשת למשתנה queryinfo.firstWeather
וגם
queryinfo.secondWeather ב-
שרת ה-proxy. לדוגמה, המדיניות הבאה של 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 שלכם משתמש באסימונים למוכ"ז מסוג OAuth v2.0. נבחן את קוד המדיניות לדוגמה שלמעלה
עבודה עם בקשה הנושאת אסימון OAuth v2.0 הכולל כותרת כזו:
Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.
כמעצבי ה-API, נניח שאתם רוצים להשתמש בערך האסימון (אבל לא בכל ) כמפתח בחיפוש של מטמון. ניתן להשתמש בקוד המדיניות extractVariables שלמעלה כדי מחלצים את האסימון.
כש-Apigee Edge מחיל את קוד המדיניות extractVariables שלמעלה על הכותרת הזו,
מגדירים את המשתנה clientrequest.oauthtoken
כ-
TU08xptfFfeM7aS0xHqlxTgEAdAM
.
עכשיו אפשר לגשת למשתנה clientrequest.oauthtoken
ב
שרת proxy. לדוגמה, המדיניות הבאה של 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>
<JSONPayload>
$
קחו לדוגמה את המטען הייעודי (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 Edge מחיל את קוד המדיניות extractVariables שלמעלה על הודעת ה-JSON הזו,
מגדירה שני משתנים: geocoderesponse.latitude
ו-
geocoderesponse.longitude
. שני המשתנים משתמשים באותה קידומת של משתנה של
geocoderesponse
הסיומת של המשתנים האלה מצוינת במפורש על ידי
המאפיין name
של הרכיב <Variable>
.
המשתנה geocoderesponse.latitude
מקבל את הערך
37.42291810
. המשתנה geocoderesponse.longitude
מקבל את הערך
-122.08542120
.
עכשיו אפשר לגשת למשתנה geocoderesponse.latitude
ב
שרת proxy. לדוגמה, המדיניות הבאה של 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>
<XMLPayload>
נבחן את המטען הייעודי (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 Edge מחיל את קוד המדיניות extractVariables שלמעלה על הודעת ה-XML הזו,
מגדירה שלושה משתנים: directionsresponse.travelmode,
directionsresponse.duration
ו-directionsresponse.timeunit
. הכול
המשתנים משתמשים באותה תחילית של directionsresponse
. הסיומת של
את המשתנים האלה מצוין במפורש על ידי הרכיב <Variable>
name
.
המשתנה directionsresponse.travelmode
מקבל את הערך
DRIVING
. המשתנה directionsresponse.duration
מקבל את הערך
19
. המשתנה directionsresponse.timeunit
מקבל את הערך
minutes
.
עכשיו אפשר לגשת למשתנה directionresponse.travelmode
ב-
שרת ה-proxy. לדוגמה, המדיניות הבאה של AssignMessage מעתיקה אותו לכותרת בשם
'tmode' בתשובה:
<AssignMessage async="false" continueOnError="false" enabled=&quo>t;t<rue" n>ame="<;GetURIPath&>quo<t;<>/span> Dis<playNam>eGetXML<Var/DisplayName A>dd Headers Header nam<e=">;tmod<e"{>dir<ecti>ons<response.travelmode}/Head>er < /Headers /Add Ignor>eUn<resolvedVariablestrue/IgnoreUnresolvedVariables AssignTo >c<reateNew=">;false" transport="http" type="request"/ /AssignMessage
מידע על המדיניות tractVariables
מפתחי API בונים שרתי proxy ל-API שמתנהגים באופן שונה בהתאם לתוכן ההודעות, כולל כותרות, נתיבי URI, מטענים ייעודיים ופרמטרים של שאילתות. לעיתים קרובות, שרת ה-proxy מחלץ חלק חלק מהתוכן הזה לשימוש בהצהרת תנאי. כדי לבצע את הפעולה הזו, צריך להשתמש במדיניות ExtensionVariables הזה.
כשמגדירים את המדיניות TransVariables, אפשר לבחור:
- שמות המשתנים להגדרה
- מקור המשתנים
- כמה משתנים צריך לחלץ ולהגדיר
כשמתבצעת הרצה, המדיניות מחילה תבנית טקסט על התוכן, ואחרי שמוצאים התאמה, היא מגדירה בערך של המשתנה הייעודי עם התוכן. לאחר מכן, ניתן לקבל גישה לקודים ולכללי מדיניות אחרים את המשתנים האלה כדי לאפשר התנהגות דינמית או כדי לשלוח נתונים עסקיים אל Edge API Analytics.
כדי לראות כיצד ניתן להשתמש במשתני חילוץ כדי ליצור דוחות Analytics מבוססי-תוכן, ניתוח תוכן של הודעות API באמצעות ניתוח נתונים בהתאמה אישית.
היקף
למשתנים שמוגדרים במדיניות חילוץ משתנים יש היקף גלובלי. כלומר, אחרי המדיניות extractVariables מגדירה משתנה חדש. ניתן לגשת למשתנה הזה מכל מדיניות או בכל שלב בתהליך (שמופעל אחרי המדיניות tractVariables). הזה כוללת:
- PreFlow: ProxyEndpoint ו-TargetEndpoint (בקשה ותגובה)
- PostFlow: ProxyEndpoint ו-TargetEndpoint (בקשה ותגובה)
- PostClientFlow: ProxyEndpoint (תגובה בלבד, באמצעות התחילית של מדיניות בנושא רישום הודעות)
- תהליכים של שגיאות
מידע על התאמה ויצירת משתנים
המדיניות tractVariables שולפת מידע מבקשה או מתגובה וכותבת למשתנה. לגבי כל סוג מידע שאפשר לחלץ, כמו נתיב ה-URI או נתוני XML, מציינים את הדפוס שצריך להתאים ואת שם המשתנה שמשמש לשמירת התחילית שחולץ.
עם זאת, אופן הפעולה של התאמת תבניות תלוי במקור של החילוץ. הבאים מתארים את שתי הקטגוריות הבסיסיות של המידע שאפשר לחלץ.
נתיבי URI תואמים, פרמטרים של שאילתות, כותרות, פרמטרים של טפסים ומשתנים
כשמחלצים מידע מנתיב URI, פרמטרים של שאילתה, כותרות, פרמטרים של טפסים שבהם משתמשים בתג <Pattern> כדי לציין אחד או יותר ולהתאים אותם אישית. לדוגמה, הדוגמה הבאה למדיניות מציגה דפוס תואם אחד של נתיב ה-URI:
<ExtractVariables name="ExtractVariabl>es-1<"> Sou<rcerequ>est/<Source > URIP<ath Pattern ignoreC>ase="tr<ue">/a/{<pathSeg}>/Pat<tern /URIPa>th Vari<ablePrefixurire>ques<t/VariablePrefix Ignor>eUnr<esolvedVariablestrue/Ignor>e<UnresolvedVariabl>es /ExtractVariables
בדוגמה הזו, המשתנה urirequest.pathSeg מוגדר למה שמופיע ב-Proxy.pathsuffix אחרי '/a/'. לדוגמה, נניח שהנתיב הבסיסי של שרת ה-proxy ל-API הוא /basepath/v1 . עם בקשה נכנסת אל http://myCo.com/basepath/v1/a/b מוגדר ל-"b".
ציון תבניות מרובות
ניתן לציין מספר תבניות להתאמה, בהתאם לתגי <Pattern>, כאשר:
- מתבצעת בדיקה של התאמה לכל הדפוסים.
- אם אף אחת מהתבניות לא תואמת, המדיניות לא עושה דבר והמשתנים לא נוצר.
- אם יותר מדפוס אחד תואם, הדפוס עם מקטעי הנתיב הארוכים ביותר משמש עבור חילוץ.
- אם לשני דפוסים תואמים יש את אותם מקטעי הנתיב הארוכים ביותר, הדפוס שצוין ראשון המדיניות משמשת לחילוץ.
בדוגמה הבאה, יוצרים מדיניות שמכילה שלוש תבניות תואמות ל-URI path:
<ExtractVariables name="ExtractVariabl>es-1<"> Sou<rcerequ>est/<Source > URIP<ath Pattern ignoreC>ase="tr<ue">/a/{pat<hSeg}/Pattern Patte>rn ignoreCase=<"tr>ue"<;/a/b/{pathSeg}/Pattern > Pattern ign<oreCase=>&quo<t;true&q>uot;</a/b/c/{pathSe>g}/Pattern< /URIPath > Var<iablePrefixurirequest/Var>iabl<ePrefix IgnoreUnresolve>d<Variablestrue/Ign>oreUnresolvedVariables /ExtractVariables
נניח שלשרת Proxy ל-API עם הנתיב Basepath של /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="ExtractVariabl>es-1<"> Sou<rcerequ>est/<Source > URIP<ath Pattern ignoreC>ase="tr<ue">/a/{pat<hSeg}/Pattern Patte>rn ignoreCase=<"tr>ue"<;/a/b/{pathSeg}/Pattern > Pattern ignoreCase=&q<uot;true>&quo<t;/a/{pa>thSe<g1}/c/{pathSeg>2}/Pattern< /URIPath > Var<iablePrefixurirequest/Var>iabl<ePrefix IgnoreUnresolve>d<Variablestrue/Ign>oreUnresolvedVariables /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="ExtractVariabl>es-1<"> Sou<rcerequ>est/<Source QueryParam >name=&q<uot;w.2" Patte>rn ignore<Case=&qu>ot;t<rue"{s>econ<dW}/Pattern > /QueryPar<am VariableP>refi<xurirequest/VariablePrefi>x < IgnoreUnresolvedVariables>t<rue/IgnoreUnresol>vedVariables /ExtractVariables
המשתנה urirequest.secondW הוא מוגדר ל-'2'. אם פרמטר השאילתה השני יושמט מהבקשה, המשתנה urirequest.secondW ריק. אפשר להשתמש בהוספה לאינדקס בכל פעם שיש מספר פריטים עם אותו שם בבקשה.
שימוש בתווים מיוחדים בתבנית
כשמתאימים בין נתיבי URI, אפשר להשתמש בסימן '*' וגם '**' בתווים כלליים לחיפוש בתבנית, איפה:
- "*" תואם לחלק אחד של הנתיב
- '**' תואם לכמה קטעים בנתיב
לדוגמה, מציינים תבניות לרכיב <URIPath> כפי שמוצג למטה:
<URIPath> <Pattern ignoreCase=">true"<;/a/*/{i>d}/<Pattern Pattern ignoreC>ase="<true&quo>t<;/a/**/{>id}/Pattern /URIPath
הדפוס הראשון תואם לבקשות עם נתיבים (החלק של נתיב ה-URI שאחרי ה-basepath), למשל " /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'.
אם הערך שמועבר למדיניות tractVariables מכיל תו מיוחד, כמו "{", השתמשו ב"%" כדי לסמן בתו בריחה (escape). הדוגמה הבאה תורמת לסימון בתו בריחה (escape) של "{" ו-"}" תווים בדפוס כי הם משמשים כתווים מילוליים בערך השאילתה :
<QueryParam> <Pattern ignoreCase=">true"%{use<r%} {nam>e<}/Pattern />QueryParam
בדוגמה הזו, הדפוס תואם לערך '{user} Steve' אבל לא את הערך user סטיב".
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="t>oke<n" Pattern ignoreC>ase="tr<ue">{<tokenValue}>/Pa<ttern /QueryParam !-- Overwrite tokenValue even if it was found in> <query parameter. --> He<ader name="Token&quo>t; Pattern< ignoreC>a<se=&quo>t;true"{tokenValue}/Pattern /Header
שליטה במה שקורה כשאין התאמה
אם הדפוס לא תואם, לא ייווצר משתנה מתאים. לכן, אם מדיניות אחרת מפנה למשתנה, והיא עלולה לגרום לשגיאה.
אפשרות אחת היא להגדיר את <IgnoreUnresolvedVariables>
ל-
במדיניות שמפנה את המשתנה כדי להגדיר את המדיניות לטיפול
כל משתנה שלא ניתן לפתרון כמחרוזת ריקה (null):
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
הפניה לרכיב
בהפניה לרכיב מתוארים הרכיבים והמאפיינים של extractVariables המדיניות בנושא
<ExtractVariables async="false" continueOnError="false" enabled="true&qu>ot; <name=">Extract-Variables-1<" Di>spla<yNameExtract Variables 1/Display>Name < Source> cle<arPayload=&quo>t;true|f<alse"reque>st/S<ource VariablePrefixmy>prefix/Var<iablePrefix IgnoreUnres>olve<dVariab>lestrue<|false/IgnoreUnresolvedVar>iables URIP<ath > Pa<ttern ig>nore<Case="false">/accoun<ts/{id}/Pattern /URIPa>th QueryP<aram nam>e=&q<uot;code&qu>ot; < Pattern ignoreCase=&q>uot;tru<e"DBN{dbncode}/Patter>n /QueryParam < Header >name<=">Auth<orization" Pat>tern ig<noreCas>e="fals<e"B>eare<r {oauthto>ken}</Pattern /Header FormPara>m name=&<quot;gr>eeting"< P>atte<rnhello {>user<}/Pattern > /Form<Param Variable na>me="r<equest.c>ontent&qu<ot; > Patte<rnhello {>user<}/Pattern > /Va<riable JSONPayload Variable nam>e="<;name"> < JSONPath{example}/JSONPath > /Variable< />JSONPayload < XMLP>ayload <stopPaylo>adPr<ocessing=&q>u<ot;false" > Namespaces/ Variable name="name" type="boolean" XPath/test/example/XPath /Variable /XMLPayload /ExtractVariables
<ExtractVariables> מאפיינים
<ExtractVariables async="false" continueOnError="false" enabled="true&qu>ot; name="Extract-Variables-1"
בטבלה הבאה מתוארים מאפיינים שמשותפים לכל רכיבי ההורה של המדיניות:
מאפיין | תיאור | ברירת מחדל | נוכחות |
---|---|---|---|
name |
השם הפנימי של המדיניות. הערך של המאפיין אפשר להשתמש ברכיב |
לא רלוונטי | חובה |
continueOnError |
צריך להגדיר את הערך יש להגדיר ל- |
false | אופציונלי |
enabled |
צריך להגדיר את הערך צריך להגדיר את הערך |
true | אופציונלי |
async |
המאפיין הזה הוצא משימוש. |
false | הוצא משימוש |
<DisplayName> רכיב
צריך להשתמש בנוסף למאפיין name
כדי להוסיף תווית למדיניות
עורך proxy של ממשק משתמש לניהול עם שם אחר בשפה טבעית.
<DisplayName>Policy Display Name</DisplayName>
ברירת מחדל |
לא רלוונטי אם משמיטים את הרכיב הזה, הערך של המאפיין |
---|---|
נוכחות | אופציונלי |
סוג | מחרוזת |
<Source> רכיב
(אופציונלי) מציין את המשתנה שרוצים לנתח. הערך של
ברירת המחדל של <Source>
היא message
. הערך message
הוא תלוי הקשר. בתהליך הבקשה, message
עונה על הודעת הבקשה. לחשבון
רצף תגובה, message
מוביל להודעת התשובה.
המדיניות הזו משמשת לעיתים קרובות כדי לחלץ מידע מבקשה או מהודעת תשובה, אבל
יכולים להשתמש בו כדי לחלץ מידע מכל משתנה. לדוגמה, אפשר להשתמש בו כדי לחלץ
מידע מישות שנוצרה במסגרת מדיניות AccessEntity, מנתונים
הוחזרה על ידי השירות
מדיניות יתרונות מרכזיים, או חילוץ מידע מאובייקט XML או JSON.
אם לא ניתן לפענח את <Source>
או שהנושא שלו משתנה מסוג שאינו הודעה,
אם המדיניות לא תוכל להגיב.
<Source clearPayload="true|f>alse&qu<ot;requ>est/Source
ברירת המחדל: | הודעה |
נוכחות: | אופציונלי |
סוג: | מחרוזת |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
clearPayload |
צריך להגדיר את הערך true אם רוצים לנקות את המטען הייעודי (payload) שצוין ב-
<Source> אחרי חילוץ נתונים ממנו. |
false |
אופציונלי | בוליאני |
<VariablePrefix> רכיב
(אופציונלי) כדי ליצור את השם המלא של המשתנה, צריך לאחד את
<VariablePrefix>
, נקודה והשם שמגדירים ב{curly braces}
רכיב <Pattern>
או רכיב <Variable>. מוצרים לדוגמה:
myprefix.id
, myprefix.dbncode
או myprefix.oauthtoken.
<VariablePrefix>myprefix</VariablePrefix>
לדוגמה, נניח שהערך של השם הוא "user".
- אם לא צוין
<VariablePrefix>
, הערכים שיחולצו הם הוקצה למשתנה בשםuser
. - אם צוין
<VariablePrefix>
כ-myprefix, הערך שחולץ מוקצים למשתנה בשםmyprefix.user
.
ברירת המחדל: | לא רלוונטי |
נוכחות: | אופציונלי |
סוג: | מחרוזת |
<IgnoreUnresolvedVariables> רכיב
(אופציונלי) מגדירים לפרמטר את הערך true
כדי להתייחס לכל משתנה שלא ניתן לפתרון כמחרוזת ריקה
(null). יש להגדיר את הערך false
אם רוצים שהמדיניות תגרור שגיאה כשיש הפניה אליהם
לא ניתן לפתור אותו.
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
ברירת המחדל: | לא נכון |
נוכחות: | אופציונלי |
סוג: | בוליאני |
אם הפניית XPath לא מפוענחת ב-<XMLPayload>
, המדיניות זורקת
הודעת השגיאה הבאה:
{ "fault":{ "faultstring":"Unresolved xpath path in policy policy_name.", "detail":{ "errorcode":"steps.extractvariables.InvalidXPath" } } }
<URIPath> רכיב
(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) חילוץ ערך מ-Proxy.pathsuffix של הודעת מקור של בקשה. הנתיב שהוחל על הדפוס הוא proxy.pathsuffix, שלא כולל את basepath של ה-API ל-Proxy. אם המיקום הודעת המקור מובילה לסוג ההודעה תגובה, והרכיב הזה לא עושה דבר.
<URIPath> <Pattern ignoreCase="f>alse"/acc<ounts/{i>d<}/Patter>n /URIPath
ניתן להשתמש במספר רכיבי <Pattern>:
<URIPath> <Pattern ignoreCase="f>alse"/acc<ounts/{i>d}/P<attern Pattern ignoreCa>se="false"/accounts/{id}/<transact>i<ons/{ind>ex}/Pattern /URIPath
ברירת המחדל: | לא רלוונטי |
נוכחות: | זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים:
<URIPath> , <QueryParam> , <Header>
<FormParam> , <JSONPayload> , או
<XMLPayload>. |
סוג: | לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
ignoreCase | מציינת להתעלם מאותיות קטנות בזמן התאמה להורה. |
false |
אופציונלי | בוליאני |
<QueryParam> רכיב
(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) חילוץ ערך מפרמטר השאילתה שצוין של הודעת מקור מסוג בקשה. אם הודעת המקור מובילה לסוג ההודעה תגובה, ואז הרכיב הזה שום דבר.
<QueryParam name=">code<" Pattern ignoreC>ase="tr<ue">D<BN{dbncode}>/Pattern /QueryParam
אם לכמה פרמטרים של שאילתה יש שם זהה, השתמשו באינדקסים כדי להפנות לפרמטרים:
<QueryParam name=">;w.2<" Pattern ignoreC>ase="<;true&qu>o<t;{secondW}>/Pattern /QueryParam
ברירת המחדל: | לא רלוונטי |
נוכחות: | זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים:
<URIPath> , <QueryParam> , <Header>
<FormParam> , <JSONPayload> , או
<XMLPayload>. |
סוג: | לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
שם | משמש לציון השם של פרמטר השאילתה. אם למספר פרמטרים של שאילתה יש אותו שם, השתמשו בהפניות לאינדקס, שבהן המופע הראשון של פרמטר השאילתה אין אינדקס, השני הוא באינדקס 2, השלישי באינדקס 3 וכו' |
לא רלוונטי |
חובה | מחרוזת |
<Header> רכיב
(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) חילוץ ערך מכותרת ה-HTTP שצוינה של הודעת ה-request או ה-response שצוינו. אם יש כמה כותרות אותו שם, הערכים שלהם מאוחסנים במערך.
<!-- The name is the actual header name. --> <Header name="Authoriza>t<ion" !-- Provide a name for your new custom variabl>e he<re. -- Pattern ignoreCa>se="false"<;Bearer >{<oauthto>ken}/Pattern /Header
אם יש כמה כותרות בעלות שם זהה, השתמשו באינדקסים כדי להפנות לכותרות נפרדות מערך:
<Header name="myHead>er.2<" Pattern ignoreC>ase="true<"{s>e<condHea>der}/Pattern /Header
או את הקוד הבא כדי להציג את כל הכותרות במערך:
<Header name="myHeader.va>lues<" Pattern ignoreC>ase="t<rue">;<{myHead>ers}/Pattern /Header
ברירת המחדל: | לא רלוונטי |
נוכחות: | זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים:
<URIPath> , <QueryParam> , <Header>
<FormParam> , <JSONPayload> , או
<XMLPayload>. |
סוג: | לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
שם | מציין את שם הכותרת שממנה מחלצים את הערך. אם מספר
יש את אותו שם, משתמשות בהפניות לאינדקס, כאשר המופע הראשון של התג
הכותרת לא מכילה אינדקס, השנייה היא באינדקס 2, השלישית באינדקס 3 וכו'.
.values כדי לקבל את כל הכותרות במערך. |
לא רלוונטי |
חובה | מחרוזת |
<FormParam> רכיב
(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) חילוץ ערך
מהפרמטר של הטופס שצוין בהודעת ה-request או ה-response שצוינו. פרמטרים של טופס
רק כשהכותרת Content-Type
של ההודעה שצוינה היא
application/x-www-form-urlencoded
.
<FormParam name="gree>ting&<quot; > Patternhe<llo {use>r<}/Pattern >/FormParam
ברירת המחדל: | לא רלוונטי |
נוכחות: | זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים:
<URIPath> , <QueryParam> , <Header>
<FormParam> , <JSONPayload> , או
<XMLPayload>. |
סוג: | לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
שם | שם פרמטר הטופס שממנו מחלצים את הערך. |
לא רלוונטי |
חובה | מחרוזת |
<Variable> רכיב
(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) מציינת את שם של משתנה שממנו יש לחלץ את הערך.
<Variable name="m>yVar&<quot; > Patternhe<llo {use>r<}/Pattern> /Variable
כדי לחלץ שני ערכים מהמשתנה:
<Variable name="m>yVar<" > Patternhello {firstName} <{lastNam>e<}/Pattern> /Variable
ברירת המחדל: | לא רלוונטי |
נוכחות: | זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים:
<URIPath> , <QueryParam> , <Header>
<FormParam> , <JSONPayload> , או
<XMLPayload>. |
סוג: | לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
שם | שם המשתנה שממנו יש לחלץ את הערך. |
לא רלוונטי |
חובה | מחרוזת |
<JSONPayload> רכיב
(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) מציינת את הודעה בפורמט JSON שממנה יתבצע חילוץ הערך של המשתנה. JSON החילוץ מתבצע רק כשהכותרת Content-Type של ההודעה היא application/json.
<JSONPayload> <Variable name="name" typ>e="<;string&>quot; < JSONPa>th{e<xample}/J>S<ONPath /V>ariable /JSONPayload
ברירת המחדל: | לא רלוונטי |
נוכחות: | זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים:
<URIPath> , <QueryParam> , <Header>
<FormParam> , <JSONPayload> , או
<XMLPayload>. |
סוג: | לא רלוונטי |
<JSONPayload>/<Variable> רכיב
(נדרש ברכיב JSONPayload.) מציינת את המשתנה שבו הערך שחולץ הוקצה. כדי לאכלס, אפשר לכלול כמה תגי <Variable> ברכיב <Variable>. משתנים רבים.
<Variable name="name" typ>e=&q<uot;stri>ng" < JSONPa>t<h{example>}/JSONPath /Variable
ברירת המחדל: | לא רלוונטי |
נוכחות: | נדרש ברכיב JSONPayload. |
סוג: | לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
שם |
מציין את שם המשתנה שעבורו הערך יחולץ הוקצה. |
שם |
חובה | מחרוזת |
סוג | מציין את סוג הנתונים של ערך המשתנה. | לא רלוונטי | אופציונלי |
מחרוזת. ניתן לבחור מבין האפשרויות הבאות:
|
<JSONPayload>/<Variable>/<JSONPath> רכיב
(נדרש ברכיב JSONPayload:Variable). מציינת את נתיב ה-JSON שמשמש לחילוץ קובץ מהודעה בפורמט JSON.
<Variable name=">name<" > JSONPath$.rss.cha<nnel.titl>e</JSONPath> /Variable
ברירת המחדל: | לא רלוונטי |
נוכחות: | חובה |
סוג: | מחרוזת |
<XMLPayload> רכיב
(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) מציינת את
הודעה בפורמט XML שממנה יחול הערך של המשתנה. מטענים ייעודיים (payloads) מסוג XML
מחולצים רק כאשר הכותרת Content-Type
של ההודעה.
היא text/xml
, application/xml
,
או application/*+xml
.
<XMLPayload stopPayloadProcessing="f>als<e" >Namesp<aces Namespace prefi>x="apigee"h<ttp://www.>apigee<.com/Namespace Name>space prefix="gma<il"ht>tp:<//mail.goog>le.<com/Namespace /Namespaces Varia>ble na<me=&q>uot;name" type="b<oolean>&qu<ot; >X<Path/apigee>:test/apigee:example/XPath /Variable /XMLPayload
ברירת המחדל: | לא רלוונטי |
נוכחות: | זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים:
<URIPath> , <QueryParam> , <Header>
<FormParam> , <JSONPayload> , או
<XMLPayload>. |
סוג: | לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
stopPayloadProcessing |
צריך להגדיר את הערך |
false |
אופציונלי | בוליאני |
<XMLPayload>/<Namespaces> רכיב
(אופציונלי) מציין את מרחב השמות שישמש בהערכת ה-XPath. אם אתם משתמשים מרחבי השמות בביטויי ה-XPath שלכם, עליכם להצהיר כאן על מרחבי השמות, כפי שמוצג בדוגמה הבאה.
<XMLPayload stopPayloadProcessing="f>als<e" >Namesp<aces Namespace prefi>x="apigee"h<ttp://www.>apigee<.com/Namespace Name>space prefix="gma<il"ht>tp:<//mail.goog>le.<com/Namespace /Namespaces Variabl>e nam<e=&qu>ot;legName" type="string" XPath/api<gee:Di>rec<tions/api>g<ee:route/ap>igee:leg/apigee:name/XPath /Variable /XMLPayload
אם אתם לא משתמשים במרחבי שמות בביטויי ה-XPath שלכם, תוכלו להשמיט או להוסיף תגובה.
<Namespaces>
, כמו בדוגמה הבאה:
<XMLPayload stopPayloadProcessing="f>als<e&qu<ot; !-- N>ame>spa<ces/ -- Variable name="legName>"<; typ>e="string" X<Path/D>ire<ctions/ro>u<te/leg/name>/XPath /Variable /XMLPayload
ברירת המחדל: | לא רלוונטי |
נוכחות: | אופציונלי |
סוג: | מחרוזת |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
prefix |
הקידומת של מרחב השמות. |
לא רלוונטי |
חובה | מחרוזת |
<XMLPayload>/<Variable> רכיב
(אופציונלי) מציין משתנה שאליו יוקצה הערך שחולץ.
<Variable name="name" type>=&qu<ot;bo>olean" < XPat>h</test/exa>mple/XPath /Variable
ברירת המחדל: | לא רלוונטי |
נוכחות: | אופציונלי |
סוג: | לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
שם |
מציין את שם המשתנה שעבורו הערך יחולץ הוקצה. |
שם |
חובה | מחרוזת |
סוג | מציין את סוג הנתונים של ערך המשתנה. | בוליאני | אופציונלי |
מחרוזת. ניתן לבחור מבין האפשרויות הבאות:
|
<XMLPayload>/<Variable>/<XPath> רכיב
(חובה ברכיב XMLPayload:Variable). מציינת את ה-XPath שהוגדר עבור מותאם אישית. יש תמיכה רק בביטויי XPath 1.0.
<Variable name="name" type>=&qu<ot;bo>olean" < XPat>h</test/exa>mple/XPath /Variable
דוגמה עם מרחב שמות. אם אתם משתמשים במרחבי שמות בביטויי XPath, עליכם להצהיר (declare)
מרחבי השמות בקטע <XMLPayload><Namespaces>
של המדיניות.
<Variable name="name" type>=&qu<ot;bo>olean" XPath/<foo:te>s<t/foo:exa>mple/XPath /Variable
ברירת המחדל: | לא רלוונטי |
נוכחות: | חובה |
סוג: | מחרוזת |
התייחסות לשגיאות
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
steps.extractvariables.ExecutionFailed |
500 |
This error occurs when:
|
build |
steps.extractvariables.ImmutableVariable |
500 | A variable used in the policy is immutable. The policy was unable to set this variable. | |
steps.extractvariables.InvalidJSONPath |
500 | This error occurs if an invalid JSON path is used in the JSONPath element of the
policy. For example, if a JSON payload does not have the object Name ,
but you specify Name as the path in the policy, then this error occurs. |
build |
steps.extractvariables.JsonPathParsingFailure |
500 | This error occurs when the policy is unable to parse a JSON path and
extract data from the flow variable specified in Source element. Typically this
happens if the flow variable specified in the Source element does not exist in the current
flow. |
build |
steps.extractvariables.SetVariableFailed |
500 | This error occurs if the policy could not set the value to a variable. The error generally happens if you try to assign values to multiple variables whose names start with the same words in a nested dot-separated format. | build |
steps.extractvariables.SourceMessageNotAvailable |
500 | This error occurs if the message
variable specified in the Source element of the policy
is either:
|
build |
steps.extractvariables.UnableToCast |
500 | This error occurs if the policy was unable to cast the extracted value to a variable. Typically this happens if you attempt to set the value of one data type to a variable of another data type. | build |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Cause | Fix |
---|---|---|
NothingToExtract |
If the policy does not have any of the elements URIPath , QueryParam ,
Header , FormParam , XMLPayload , or JSONPayload ,
the deployment of the API Proxy fails, because there's nothing to extract. |
build |
NONEmptyPrefixMappedToEmptyURI |
This error occurs if the policy has a prefix defined in the
Namespace element under the XMLPayload element, but no URI is
defined. |
build |
DuplicatePrefix |
This error occurs if the policy has the same prefix defined more than
once in the Namespace element under the XMLPayload element. |
build |
NoXPathsToEvaluate |
If the policy does not have the XPath element within the
XMLPayload element, then the deployment of the API proxy fails with this error.
|
build |
EmptyXPathExpression |
If the policy has an empty XPath expression within the XMLPayload
element, then the deployment of the API proxy fails. |
build |
NoJSONPathsToEvaluate |
If the policy does not have the JSONPath element within the
JSONPayload element, then the deployment of the API proxy fails with this error. |
build |
EmptyJSONPathExpression |
If the policy has an empty XPath expression within the
XMLPayload element, then the deployment of the API proxy fails. |
build |
MissingName |
If the policy does not have the name attribute in any of the policy
elements like QueryParam , Header , FormParam or
Variable , where it is required, then the deployment of the API proxy fails. |
build |
PatternWithoutVariable |
If the policy does not have a variable specified within the Pattern element,
then the deployment of the API proxy fails. The Pattern element requires the name of
the variable in which extracted data will be stored. |
build |
CannotBeConvertedToNodeset |
If the policy has an XPath expression where the Variable type
is defined as nodeset,
but the expression cannot be converted to nodeset, then the deployment of the API proxy fails. |
build |
JSONPathCompilationFailed |
The policy could not compile a specified JSON Path. | |
InstantiationFailed |
The policy could not be instantiated. | |
XPathCompilationFailed |
If the prefix or the value used in the XPath element is not part of any of the
declared namespaces in the policy, then the deployment of the API proxy
fails. |
build |
InvalidPattern |
If the Pattern element definition is invalid in any of the elements like URIPath ,
QueryParam , Header , FormParam , XMLPayload
or JSONPayload within the policy, then the deployment of the
API proxy fails.
|
build |
Fault variables
These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name = "SourceMessageNotAvailable" |
extractvariables.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | extractvariables.EV-ParseJsonResponse.failed = true |
Example error response
{ "fault":{ "detail":{ "errorcode":"steps.extractvariables.SourceMessageNotAvailable" }, "faultstring":"request message is not available for ExtractVariable: EV-ParseJsonResponse" } }
Example fault rule
<FaultRule name="Extract Variable Faults"> <Step> <Name>AM-CustomErrorMessage</Name> <Condition>(fault.name = "SourceMessageNotAvailable") </Condition> </Step> <Condition>(extractvariables.EM-ParseJsonResponse.failed = true) </Condition> </FaultRule>