אתם צופים במסמכי התיעוד של Apigee Edge.
אפשר לעבור אל מסמכי התיעוד של Apigee X. מידע
מה
המדיניות ExtractVariables מחלצת תוכן מבקשה או מתגובה ומגדירה את הערך של משתנה לתוכן הזה. אפשר לחלץ כל חלק מההודעה, כולל כותרות, נתיבי URI, מטען ייעודי (payload) של JSON/XML, פרמטרים של טופס ופרמטרים של שאילתה. המדיניות פועלת על ידי החלת תבנית טקסט על תוכן ההודעה, ואם נמצאת התאמה, מוגדר משתנה עם תוכן ההודעה שצוין.
לרוב משתמשים במדיניות הזו כדי לחלץ מידע מהודעת בקשה או תגובה, אבל אפשר להשתמש בה גם כדי לחלץ מידע ממקורות אחרים, כולל ישויות שנוצרו על ידי המדיניות AccessEntity, אובייקטים של XML או אובייקטים של JSON.
אחרי שחולצים את תוכן ההודעה שצוין, אפשר להפנות למשתנה במדיניות אחרת כחלק מעיבוד של בקשה ותגובה.
סרטונים
כדאי לצפות בסרטונים הבאים כדי לקבל מידע נוסף על מדיניות ExtractVariables.
| וידאו | תיאור |
|---|---|
| שליפת משתנים ממטען ייעודי (payload) של XML | אפשר לחלץ משתנים ממטען ייעודי (payload) של XML באמצעות מדיניות Extract Variable (חילוץ משתנה). |
| שליפת משתנים ממטען ייעודי (payload) של JSON | אפשר לחלץ משתנים ממטען JSON באמצעות מדיניות Extract Variable. |
| חילוץ משתנים מפרמטרים | אפשר לחלץ משתנים מפרמטרים, כמו פרמטרים של שאילתות, כותרות, טפסים או URI. |
| חילוץ משתנים מפרמטרים עם כמה ערכים | חילוץ משתנים מפרמטרים עם כמה ערכים. |
| שליפת משתנים מפרמטר של שאילתה (Classic Edge) | איך מחלצים משתנים מפרמטר של שאילתה באמצעות ממשק המשתמש הקלאסי של Edge. |
| שליפת משתנים ממטען ייעודי (payload) של XML או JSON (Classic Edge) | איך מחלצים משתנים ממטען ייעודי (payload) של XML או JSON באמצעות ממשק המשתמש של Classic Edge. |
דוגמאות
בדוגמאות הקוד הבאות של מדיניות אפשר לראות איך לחלץ משתנים מסוגי הארטיפקטים הבאים:
GitHub
הקישורים האלה מפנים לדוגמאות של שרתי proxy של API שפועלים, שאפשר לפרוס ולהריץ ב-Edge. הם משתמשים ב-ExtractVariables ונמצאים במאגר api-platform-samples של Apigee ב-GitHub. בקובצי ה-README מוסבר איך משתמשים ברכיב ExtractVariables בכל מקרה, ואיך פורסים ומריצים כל דוגמה.
- דוגמה למשתנים של חילוץ והקצאה (חילוץ נתונים מהודעות 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> מציין למדיניות ExtractVariables לחלץ מידע מנתיב ה-URI. הרכיב
<Pattern> מציין את התבנית להחלה על נתיב ה-URI. התבנית
מטופלת כתבנית פשוטה, והסוגריים המסולסלים מציינים את החלק המשתנה
בנתיב ה-URI.
השם של המשתנה שיוגדר נקבע לפי הערך שצוין באלמנט
<VariablePrefix>, וגם לפי הערך שמוקף בסוגריים מסולסלים {} באלמנט <Pattern>. שני הערכים מחוברים באמצעות נקודה ביניהם, ולכן שם המשתנה יהיה urirequest.id, לדוגמה. אם אין רכיב <VariablePrefix>, שם המשתנה הוא רק הערך שמוקף בסוגריים מסולסלים.
נבחן את קוד המדיניות לדוגמה שלמעלה, שפועל עם הבקשה הנכנסת הבאה:
GET http://org1-test.apigee.net/svc1/accounts/12797282
נניח ש-basepath של ה-API Proxy הוא /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 בפרוקסי.
לדוגמה, מדיניות 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. כדי להפנות לפרמטרים האלה של השאילתה במדיניות ExtractVariables, צריך להשתמש באינדקסים. המופע הראשון של פרמטר השאילתה לא מקבל אינדקס, המופע השני מקבל אינדקס 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 בפרוקסי. לדוגמה, מדיניות 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 Edge מחיל את קוד המדיניות 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>
<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 בפרוקסי. לדוגמה, מדיניות 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>כשמחילים את קוד המדיניות ExtractVariables שמוצג למעלה על הודעת ה-XML הזו, מוגדרים שלושה משתנים: directionsresponse.travelmode,, directionsresponse.duration ו-directionsresponse.timeunit. כל המשתנים משתמשים באותה קידומת משתנה directionsresponse. הסיומת של המשתנים האלה מצוינת במפורש במאפיין name של רכיב <Variable>.
המשתנה directionsresponse.travelmode מקבל את הערך DRIVING. המשתנה directionsresponse.duration מקבל את הערך 19. המשתנה directionsresponse.timeunit מקבל את הערך minutes.
עכשיו אפשר לגשת למשתנה 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
מפתחי API יוצרים פרוקסי ל-API שמתנהג באופן שונה בהתאם לתוכן ההודעות, כולל כותרות, נתיבי URI, מטען ייעודי (payload) ופרמטרים של שאילתות. לרוב, ה-proxy מחלץ חלק מהתוכן הזה לשימוש בהצהרת תנאי. אפשר להשתמש במדיניות ExtractVariables כדי לעשות את זה.
כשמגדירים את מדיניות ExtractVariables, אפשר לבחור:
- שמות המשתנים שיוגדרו
- מקור המשתנים
- כמה משתנים לחלץ ולהגדיר
בזמן ההפעלה, המדיניות מחילה תבנית טקסט על התוכן, ואם נמצאת התאמה, היא מגדירה את הערך של המשתנה המיועד עם התוכן. מדיניות וקוד אחרים יכולים להשתמש במשתנים האלה כדי להפעיל התנהגות דינמית או כדי לשלוח נתונים עסקיים ל-Edge API Analytics.
כדי לראות איך אפשר להשתמש ב-ExtractVariables כדי ליצור דוחות Analytics שמבוססים על תוכן, אפשר לעיין במאמר בנושא ניתוח תוכן של הודעות API באמצעות Analytics בהתאמה אישית.
היקף
למשתנים שמוגדרים באמצעות המדיניות ExtractVariables יש היקף גלובלי. כלומר, אחרי שמדיניות ExtractVariables מגדירה משתנה חדש, אפשר לגשת למשתנה הזה מכל מדיניות או קוד בכל שלב של התהליך (שמופעל אחרי מדיניות ExtractVariables). זה כולל:
- PreFlow: ProxyEndpoint ו-TargetEndpoint (בקשה ותגובה)
- PostFlow: ProxyEndpoint ו-TargetEndpoint (בקשה ותגובה)
- PostClientFlow: ProxyEndpoint (תגובה בלבד, באמצעות מדיניות רישום הודעות)
- 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 הפרוקסי הוא /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>נניח שיש API Proxy עם basepath של /basepath/v1, וכתובת ה-URL של הבקשה הנכנסת ל-API Proxy היא מהצורה הבאה:
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>שוב , נניח שיש API Proxy עם נתיב בסיס של /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>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, מנתונים שהוחזרו על ידי מדיניות Service Callout או לחלץ מידע מאובייקט XML או JSON.
אם לא ניתן לפתור את <Source> או שהוא נפתר כסוג שאינו הודעה,
המדיניות לא תגיב.
<Source clearPayload="true|false">request</Source>
| ברירת מחדל: | הודעה |
| נוכחות: | אופציונלי |
| סוג: | מחרוזת |
מאפיינים
| מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
|---|---|---|---|---|
| clearPayload |
אם רוצים לנקות את המטען הייעודי (payload) שצוין ב-<Source> אחרי חילוץ הנתונים ממנו, צריך להגדיר את הערך true. |
false |
אופציונלי | בוליאני |
אלמנט <VariablePrefix>
(אופציונלי) השם המלא של המשתנה נוצר על ידי צירוף של
<VariablePrefix>, נקודה והשם שאתם מגדירים בתוך {סוגריים מסולסלים} ברכיב
<Pattern> או ברכיב <Variable>. לדוגמה:
myprefix.id, myprefix.dbncode או myprefix.oauthtoken.
<VariablePrefix>myprefix</VariablePrefix>
לדוגמה, נניח שהערך של name הוא 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 שצוינה של הודעת בקשה או תגובה שצוינה. אם לכמה כותרות יש את אותו שם, הערכים שלהן מאוחסנים במערך.
<!-- 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>
(אופציונלי, אבל מידע נוסף מופיע בשורה 'נוכחות' בטבלה שלמטה). הפונקציה מחלצת ערך
מפרמטר הטופס שצוין של בקשה או של הודעת תגובה שצוינו. אפשר לחלץ פרמטרים של טופס רק אם הכותרת 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> באלמנט <JSONPayload> כדי לאכלס כמה משתנים.
<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> 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>
| ברירת מחדל: | לא רלוונטי |
| נוכחות: | אופציונלי |
| סוג: | מחרוזת |
מאפיינים
| מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
|---|---|---|---|---|
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, צריך להצהיר על מרחבי השמות בקטע <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>