מוצג המסמך של 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="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>
מידע על המדיניות 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="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/'. לדוגמה, נניח שהנתיב הבסיסי של שרת ה-proxy ל-API הוא /basepath/v1 . עם בקשה נכנסת אל http://myCo.com/basepath/v1/a/b מוגדר ל-"b".
ציון תבניות מרובות
ניתן לציין מספר תבניות להתאמה, בהתאם לתגי <Pattern>, כאשר:
- מתבצעת בדיקה של התאמה לכל הדפוסים.
- אם אף אחת מהתבניות לא תואמת, המדיניות לא עושה דבר והמשתנים לא נוצר.
- אם יותר מדפוס אחד תואם, הדפוס עם מקטעי הנתיב הארוכים ביותר משמש עבור חילוץ.
- אם לשני דפוסים תואמים יש את אותם מקטעי הנתיב הארוכים ביותר, הדפוס שצוין ראשון המדיניות משמשת לחילוץ.
בדוגמה הבאה, יוצרים מדיניות שמכילה שלוש תבניות תואמות ל-URI path:
<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 של /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 שאחרי ה-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">%{user%} {name}</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="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>
ל-
במדיניות שמפנה את המשתנה כדי להגדיר את המדיניות לטיפול
כל משתנה שלא ניתן לפתרון כמחרוזת ריקה (null):
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
הפניה לרכיב
בהפניה לרכיב מתוארים הרכיבים והמאפיינים של extractVariables המדיניות בנושא
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1"> <DisplayName>Extract Variables 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
כדי להוסיף תווית למדיניות
עורך proxy של ממשק משתמש לניהול עם שם אחר בשפה טבעית.
<DisplayName>Policy Display Name</DisplayName>
ברירת מחדל |
לא רלוונטי אם משמיטים את הרכיב הזה, הערך של המאפיין |
---|---|
נוכחות | אופציונלי |
סוג | מחרוזת |
<Source> רכיב
(אופציונלי) מציין את המשתנה שרוצים לנתח. הערך של
ברירת המחדל של <Source>
היא message
. הערך message
הוא תלוי הקשר. בתהליך הבקשה, message
עונה על הודעת הבקשה. לחשבון
רצף תגובה, message
מוביל להודעת התשובה.
המדיניות הזו משמשת לעיתים קרובות כדי לחלץ מידע מבקשה או מהודעת תשובה, אבל
יכולים להשתמש בו כדי לחלץ מידע מכל משתנה. לדוגמה, אפשר להשתמש בו כדי לחלץ
מידע מישות שנוצרה במסגרת מדיניות AccessEntity, מנתונים
הוחזרה על ידי השירות
מדיניות יתרונות מרכזיים, או חילוץ מידע מאובייקט XML או JSON.
אם לא ניתן לפענח את <Source>
או שהנושא שלו משתנה מסוג שאינו הודעה,
אם המדיניות לא תוכל להגיב.
<Source clearPayload="true|false">request</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="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> רכיב
(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) חילוץ ערך מפרמטר השאילתה שצוין של הודעת מקור מסוג בקשה. אם הודעת המקור מובילה לסוג ההודעה תגובה, ואז הרכיב הזה שום דבר.
<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>. |
סוג: | לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
שם | משמש לציון השם של פרמטר השאילתה. אם למספר פרמטרים של שאילתה יש אותו שם, השתמשו בהפניות לאינדקס, שבהן המופע הראשון של פרמטר השאילתה אין אינדקס, השני הוא באינדקס 2, השלישי באינדקס 3 וכו' |
לא רלוונטי |
חובה | מחרוזת |
<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>. |
סוג: | לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
שם | מציין את שם הכותרת שממנה מחלצים את הערך. אם מספר
יש את אותו שם, משתמשות בהפניות לאינדקס, כאשר המופע הראשון של התג
הכותרת לא מכילה אינדקס, השנייה היא באינדקס 2, השלישית באינדקס 3 וכו'.
.values כדי לקבל את כל הכותרות במערך. |
לא רלוונטי |
חובה | מחרוזת |
<FormParam> רכיב
(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) חילוץ ערך
מהפרמטר של הטופס שצוין בהודעת ה-request או ה-response שצוינו. פרמטרים של טופס
רק כשהכותרת Content-Type
של ההודעה שצוינה היא
application/x-www-form-urlencoded
.
<FormParam name="greeting"> <Pattern>hello {user}</Pattern> </FormParam>
ברירת המחדל: | לא רלוונטי |
נוכחות: | זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים:
<URIPath> , <QueryParam> , <Header>
<FormParam> , <JSONPayload> , או
<XMLPayload>. |
סוג: | לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
שם | שם פרמטר הטופס שממנו מחלצים את הערך. |
לא רלוונטי |
חובה | מחרוזת |
<Variable> רכיב
(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) מציינת את שם של משתנה שממנו יש לחלץ את הערך.
<Variable name="myVar"> <Pattern>hello {user}</Pattern> </Variable>
כדי לחלץ שני ערכים מהמשתנה:
<Variable name="myVar"> <Pattern>hello {firstName} {lastName}</Pattern> </Variable>
ברירת המחדל: | לא רלוונטי |
נוכחות: | זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים:
<URIPath> , <QueryParam> , <Header>
<FormParam> , <JSONPayload> , או
<XMLPayload>. |
סוג: | לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
שם | שם המשתנה שממנו יש לחלץ את הערך. |
לא רלוונטי |
חובה | מחרוזת |
<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> ברכיב <Variable>. משתנים רבים.
<Variable name="name" type="string"> <JSONPath>{example}</JSONPath> </Variable>
ברירת המחדל: | לא רלוונטי |
נוכחות: | נדרש ברכיב JSONPayload. |
סוג: | לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
שם |
מציין את שם המשתנה שעבורו הערך יחולץ הוקצה. |
שם |
חובה | מחרוזת |
סוג | מציין את סוג הנתונים של ערך המשתנה. | לא רלוונטי | אופציונלי |
מחרוזת. ניתן לבחור מבין האפשרויות הבאות:
|
<JSONPayload>/<Variable>/<JSONPath> רכיב
(נדרש ברכיב JSONPayload:Variable). מציינת את נתיב ה-JSON שמשמש לחילוץ קובץ מהודעה בפורמט JSON.
<Variable name="name"> <JSONPath>$.rss.channel.title</JSONPath> </Variable>
ברירת המחדל: | לא רלוונטי |
נוכחות: | חובה |
סוג: | מחרוזת |
<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> רכיב
(אופציונלי) מציין את מרחב השמות שישמש בהערכת ה-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>
ברירת המחדל: | לא רלוונטי |
נוכחות: | אופציונלי |
סוג: | מחרוזת |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
prefix |
הקידומת של מרחב השמות. |
לא רלוונטי |
חובה | מחרוזת |
<XMLPayload>/<Variable> רכיב
(אופציונלי) מציין משתנה שאליו יוקצה הערך שחולץ.
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
ברירת המחדל: | לא רלוונטי |
נוכחות: | אופציונלי |
סוג: | לא רלוונטי |
מאפיינים
מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
---|---|---|---|---|
שם |
מציין את שם המשתנה שעבורו הערך יחולץ הוקצה. |
שם |
חובה | מחרוזת |
סוג | מציין את סוג הנתונים של ערך המשתנה. | בוליאני | אופציונלי |
מחרוזת. ניתן לבחור מבין האפשרויות הבאות:
|
<XMLPayload>/<Variable>/<XPath> רכיב
(חובה ברכיב XMLPayload:Variable). מציינת את ה-XPath שהוגדר עבור מותאם אישית. יש תמיכה רק בביטויי XPath 1.0.
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
דוגמה עם מרחב שמות. אם אתם משתמשים במרחבי שמות בביטויי XPath, עליכם להצהיר (declare)
מרחבי השמות בקטע <XMLPayload><Namespaces>
של המדיניות.
<Variable name="name" type="boolean"> <XPath>/foo:test/foo:example</XPath> </Variable>
ברירת המחדל: | לא רלוונטי |
נוכחות: | חובה |
סוג: | מחרוזת |
התייחסות לשגיאות
בקטע הזה מתוארים קודי השגיאה והודעות השגיאה שהוחזרו, ומשתני התקלה שמוגדרים על ידי Edge כשהמדיניות הזו גורמת לשגיאה. חשוב לדעת את המידע הזה אם אתם מפתחים כללי כשל כדי לטפל בתקלות. מידע נוסף זמין במאמר מה צריך לדעת? מידע על שגיאות שקשורות למדיניות וטיפול פגמים.
שגיאות זמן ריצה
השגיאות האלה עשויות להתרחש כשהמדיניות מופעלת.
קוד תקלה | סטטוס 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 | השגיאה הזו מתקבלת אם ההודעה
המשתנה שמצוין באלמנט Source של המדיניות
היא:
|
build |
steps.extractvariables.UnableToCast |
500 | השגיאה הזו מתקבלת אם המדיניות לא הצליחה להפעיל Cast של התוכן שחולץ. למשתנה. בדרך כלל זה קורה אם מנסים להגדיר ערך מסוג נתונים אחד למשתנה מסוג נתונים אחר. | build |
שגיאות פריסה
השגיאות האלו עשויות להתרחש כאשר פורסים שרת proxy שמכיל את המדיניות הזו.
שם השגיאה | סיבה | תיקון |
---|---|---|
NothingToExtract |
אם המדיניות לא מכילה אף אחד מהרכיבים URIPath , QueryParam ,
Header , FormParam , XMLPayload או JSONPayload ,
הפריסה של שרת ה-proxy ל-API נכשלה כי אין מה לחלץ. |
build |
NONEmptyPrefixMappedToEmptyURI |
שגיאה זו מתרחשת אם למדיניות יש קידומת שהוגדרה
הרכיב Namespace מתחת לרכיב XMLPayload , אבל לא קיים URI
מוגדר. |
build |
DuplicatePrefix |
שגיאה זו מתרחשת אם למדיניות יש אותה קידומת שהוגדרה יותר מ-
פעם אחת ברכיב Namespace מתחת לרכיב XMLPayload . |
build |
NoXPathsToEvaluate |
אם המדיניות לא כוללת את הרכיב XPath בתוך
XMLPayload , אז הפריסה של שרת ה-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 , כאשר הדבר נדרש, הפריסה של שרת ה-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>