המדיניות בנושא ExtractVariables

מוצג המסמך של 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 בכל מקרה, ואיך לפרוס נריץ כל דגימה.

מזהי 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, פרמטרים של שאילתה, כותרות, פרמטרים של טפסים שבהם משתמשים בתג &lt;Pattern&gt; כדי לציין אחד או יותר ולהתאים אותם אישית. לדוגמה, הדוגמה הבאה למדיניות מציגה דפוס תואם אחד של נתיב ה-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".

ציון תבניות מרובות

ניתן לציין מספר תבניות להתאמה, בהתאם לתגי &lt;Pattern&gt;, כאשר:

  • מתבצעת בדיקה של התאמה לכל הדפוסים.
  • אם אף אחת מהתבניות לא תואמת, המדיניות לא עושה דבר והמשתנים לא נוצר.
  • אם יותר מדפוס אחד תואם, הדפוס עם מקטעי הנתיב הארוכים ביותר משמש עבור חילוץ.
  • אם לשני דפוסים תואמים יש את אותם מקטעי הנתיב הארוכים ביותר, הדפוס שצוין ראשון המדיניות משמשת לחילוץ.

בדוגמה הבאה, יוצרים מדיניות שמכילה שלוש תבניות תואמות ל-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, אפשר להשתמש בסימן '*' וגם '**' בתווים כלליים לחיפוש בתבנית, איפה:

  • "*" תואם לחלק אחד של הנתיב
  • '**' תואם לכמה קטעים בנתיב

לדוגמה, מציינים תבניות לרכיב &lt;URIPath&gt; כפי שמוצג למטה:

<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, צריך לציין תג &lt;Variable&gt; אחד או יותר במדיניות. התג &lt;Variable&gt; מציין את הערך של הפרמטר שם משתנה היעד שבו מאוחסן המידע שחולץ, וה-JsonPath (JSON) או XPath (XML) למידע שחולץ.

כל תגי &lt;Variable&gt; במדיניות כדי לאכלס משתנים מרובים ממדיניות אחת. אם המיקום התג &lt;Variable&gt; לא מזינים ערך בשדה חוקי ב-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>

&lt;ExtractVariables&gt; מאפיינים

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">

בטבלה הבאה מתוארים מאפיינים שמשותפים לכל רכיבי ההורה של המדיניות:

מאפיין תיאור ברירת מחדל נוכחות
name

השם הפנימי של המדיניות. הערך של המאפיין name יכול לכלול אותיות, מספרים, רווחים, מקפים, קווים תחתונים ונקודות. הערך הזה לא יכול ארוך מ-255 תווים.

אפשר להשתמש ברכיב <DisplayName> כדי להוסיף תווית למדיניות עורך ה-Proxy של ממשק המשתמש לניהול בעל שם אחר בשפה טבעית.

לא רלוונטי חובה
continueOnError

צריך להגדיר את הערך false כדי להחזיר שגיאה כשמדיניות נכשלת. המצב הזה צפוי של רוב כללי המדיניות.

יש להגדיר ל-true כדי שביצוע התהליך יימשך גם לאחר המדיניות נכשל.

false אופציונלי
enabled

צריך להגדיר את הערך true כדי לאכוף את המדיניות.

צריך להגדיר את הערך false כדי להשבית את המדיניות. המדיניות לא תהיה אכיפה גם אם היא ממשיכה להיות מחוברת לזרימה.

true אופציונלי
async

המאפיין הזה הוצא משימוש.

false הוצא משימוש

&lt;DisplayName&gt; רכיב

צריך להשתמש בנוסף למאפיין name כדי להוסיף תווית למדיניות עורך proxy של ממשק משתמש לניהול עם שם אחר בשפה טבעית.

<DisplayName>Policy Display Name</DisplayName>
ברירת מחדל

לא רלוונטי

אם משמיטים את הרכיב הזה, הערך של המאפיין name של המדיניות הוא בשימוש.

נוכחות אופציונלי
סוג מחרוזת

&lt;Source&gt; רכיב

(אופציונלי) מציין את המשתנה שרוצים לנתח. הערך של ברירת המחדל של <Source> היא message. הערך message הוא תלוי הקשר. בתהליך הבקשה, message עונה על הודעת הבקשה. לחשבון רצף תגובה, message מוביל להודעת התשובה.

המדיניות הזו משמשת לעיתים קרובות כדי לחלץ מידע מבקשה או מהודעת תשובה, אבל יכולים להשתמש בו כדי לחלץ מידע מכל משתנה. לדוגמה, אפשר להשתמש בו כדי לחלץ מידע מישות שנוצרה במסגרת מדיניות AccessEntity, מנתונים הוחזרה על ידי השירות מדיניות יתרונות מרכזיים, או חילוץ מידע מאובייקט XML או JSON.

אם לא ניתן לפענח את <Source> או שהנושא שלו משתנה מסוג שאינו הודעה, אם המדיניות לא תוכל להגיב.

<Source clearPayload="true|false">request</Source>
ברירת המחדל: הודעה
נוכחות: אופציונלי
סוג: מחרוזת

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות סוג
clearPayload

צריך להגדיר את הערך true אם רוצים לנקות את המטען הייעודי (payload) שצוין ב- &lt;Source&gt; אחרי חילוץ נתונים ממנו.

משתמשים באפשרות <clearPayload> רק אם הודעת המקור לא נדרש אחרי הרצת extractVariables. אם מזינים את הערך true, הוא פנוי את הזיכרון שבו ההודעה משתמשת.

false

אופציונלי בוליאני

&lt;VariablePrefix&gt; רכיב

(אופציונלי) כדי ליצור את השם המלא של המשתנה, צריך לאחד את <VariablePrefix>, נקודה והשם שמגדירים ב{curly braces} רכיב <Pattern> או רכיב &lt;Variable&gt;. מוצרים לדוגמה: myprefix.id, myprefix.dbncode או myprefix.oauthtoken.

<VariablePrefix>myprefix</VariablePrefix>

לדוגמה, נניח שהערך של השם הוא "user".

  • אם לא צוין <VariablePrefix>, הערכים שיחולצו הם הוקצה למשתנה בשם user.
  • אם צוין <VariablePrefix> כ-myprefix, הערך שחולץ מוקצים למשתנה בשם myprefix.user.
ברירת המחדל: לא רלוונטי
נוכחות: אופציונלי
סוג: מחרוזת

&lt;IgnoreUnresolvedVariables&gt; רכיב

(אופציונלי) מגדירים לפרמטר את הערך true כדי להתייחס לכל משתנה שלא ניתן לפתרון כמחרוזת ריקה (null). יש להגדיר את הערך false אם רוצים שהמדיניות תגרור שגיאה כשיש הפניה אליהם לא ניתן לפתור אותו.

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
ברירת המחדל: לא נכון
נוכחות: אופציונלי
סוג: בוליאני

אם הפניית XPath לא מפוענחת ב-<XMLPayload>, המדיניות זורקת הודעת השגיאה הבאה:

{
   "fault":{
      "faultstring":"Unresolved xpath path in policy policy_name.",
      "detail":{
         "errorcode":"steps.extractvariables.InvalidXPath"
      }
   }
}

&lt;URIPath&gt; רכיב

(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) חילוץ ערך מ-Proxy.pathsuffix של הודעת מקור של בקשה. הנתיב שהוחל על הדפוס הוא proxy.pathsuffix, שלא כולל את basepath של ה-API ל-Proxy. אם המיקום הודעת המקור מובילה לסוג ההודעה תגובה, והרכיב הזה לא עושה דבר.

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
</URIPath>

ניתן להשתמש במספר רכיבי &lt;Pattern&gt;:

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
   <Pattern ignoreCase="false">/accounts/{id}/transactions/{index}</Pattern>
</URIPath>
ברירת המחדל: לא רלוונטי
נוכחות: זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload>, או <XMLPayload>.
סוג: לא רלוונטי

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות סוג
ignoreCase מציינת להתעלם מאותיות קטנות בזמן התאמה להורה.

false

אופציונלי בוליאני

&lt;QueryParam&gt; רכיב

(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) חילוץ ערך מפרמטר השאילתה שצוין של הודעת מקור מסוג בקשה. אם הודעת המקור מובילה לסוג ההודעה תגובה, ואז הרכיב הזה שום דבר.

<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 וכו'

לא רלוונטי

חובה מחרוזת

&lt;Header&gt; רכיב

(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) חילוץ ערך מכותרת ה-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 כדי לקבל את כל הכותרות במערך.

לא רלוונטי

חובה מחרוזת

&lt;FormParam&gt; רכיב

(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) חילוץ ערך מהפרמטר של הטופס שצוין בהודעת ה-request או ה-response שצוינו. פרמטרים של טופס רק כשהכותרת Content-Type של ההודעה שצוינה היא application/x-www-form-urlencoded.

<FormParam name="greeting">
    <Pattern>hello {user}</Pattern>
</FormParam>
ברירת המחדל: לא רלוונטי
נוכחות: זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload>, או <XMLPayload>.
סוג: לא רלוונטי

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות סוג
שם שם פרמטר הטופס שממנו מחלצים את הערך.

לא רלוונטי

חובה מחרוזת

&lt;Variable&gt; רכיב

(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) מציינת את שם של משתנה שממנו יש לחלץ את הערך.

<Variable name="myVar">
    <Pattern>hello {user}</Pattern>
</Variable>

כדי לחלץ שני ערכים מהמשתנה:

<Variable name="myVar">
   <Pattern>hello {firstName} {lastName}</Pattern>
</Variable>
ברירת המחדל: לא רלוונטי
נוכחות: זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload>, או <XMLPayload>.
סוג: לא רלוונטי

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות סוג
שם שם המשתנה שממנו יש לחלץ את הערך.

לא רלוונטי

חובה מחרוזת

&lt;JSONPayload&gt; רכיב

(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) מציינת את הודעה בפורמט JSON שממנה יתבצע חילוץ הערך של המשתנה. JSON החילוץ מתבצע רק כשהכותרת Content-Type של ההודעה היא application/json.

<JSONPayload>
   <Variable name="name" type="string">
      <JSONPath>{example}</JSONPath>
   </Variable>
</JSONPayload>
ברירת המחדל: לא רלוונטי
נוכחות: זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload>, או <XMLPayload>.
סוג: לא רלוונטי

&lt;JSONPayload&gt;/&lt;Variable&gt; רכיב

(נדרש ברכיב JSONPayload.) מציינת את המשתנה שבו הערך שחולץ הוקצה. כדי לאכלס, אפשר לכלול כמה תגי &lt;Variable&gt; ברכיב &lt;Variable&gt;. משתנים רבים.

<Variable name="name" type="string">
   <JSONPath>{example}</JSONPath>
</Variable>
ברירת המחדל: לא רלוונטי
נוכחות: נדרש ברכיב JSONPayload.
סוג: לא רלוונטי

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות סוג
שם

מציין את שם המשתנה שעבורו הערך יחולץ הוקצה.

שם

חובה מחרוזת
סוג מציין את סוג הנתונים של ערך המשתנה. לא רלוונטי אופציונלי

מחרוזת. ניתן לבחור מבין האפשרויות הבאות:

  • מחרוזת
  • בוליאני
  • מספר שלם
  • long
  • מספר ממשי (float)
  • כפולה
  • Nodeset (מחזיר שבר JSON)

&lt;JSONPayload&gt;/&lt;Variable&gt;/&lt;JSONPath&gt; רכיב

(נדרש ברכיב JSONPayload:Variable). מציינת את נתיב ה-JSON שמשמש לחילוץ קובץ מהודעה בפורמט JSON.

<Variable name="name">
   <JSONPath>$.rss.channel.title</JSONPath>
</Variable>
ברירת המחדל: לא רלוונטי
נוכחות: חובה
סוג: מחרוזת

&lt;XMLPayload&gt; רכיב

(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) מציינת את הודעה בפורמט 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

צריך להגדיר את הערך true כדי להפסיק את הערכת ה-XPath אחרי שמשתנה אחד מאוכלס. כלומר, רק משתנה אחד מאוכלס על ידי המדיניות.

false

אופציונלי בוליאני

&lt;XMLPayload&gt;/&lt;Namespaces&gt; רכיב

(אופציונלי) מציין את מרחב השמות שישמש בהערכת ה-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

הקידומת של מרחב השמות.

לא רלוונטי

חובה מחרוזת

&lt;XMLPayload&gt;/&lt;Variable&gt; רכיב

(אופציונלי) מציין משתנה שאליו יוקצה הערך שחולץ.

<Variable name="name" type="boolean">
   <XPath>/test/example</XPath>
</Variable>
ברירת המחדל: לא רלוונטי
נוכחות: אופציונלי
סוג: לא רלוונטי

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות סוג
שם

מציין את שם המשתנה שעבורו הערך יחולץ הוקצה.

שם

חובה מחרוזת
סוג מציין את סוג הנתונים של ערך המשתנה. בוליאני אופציונלי

מחרוזת. ניתן לבחור מבין האפשרויות הבאות:

  • מחרוזת
  • בוליאני
  • מספר שלם
  • long
  • מספר ממשי (float)
  • כפולה
  • Nodeset (מחזיר שבר XML)

&lt;XMLPayload&gt;/&lt;Variable&gt;/&lt;XPath&gt; רכיב

(חובה ברכיב 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

השגיאה הזו מתרחשת כאשר:

  • המטען הייעודי (payload) של הקלט (JSON, XML) ריק.
  • הקלט (JSON, XML וכו') שהועבר למדיניות לא תקין או שגוי.
steps.extractvariables.ImmutableVariable 500 משתנה שנעשה בו שימוש במדיניות לא ניתן לשינוי. המדיניות לא הצליחה להגדיר זאת מותאם אישית.
steps.extractvariables.InvalidJSONPath 500 השגיאה הזו מתקבלת אם משתמשים בנתיב JSON לא תקין ברכיב JSONPath של המדיניות בנושא לדוגמה, אם המטען הייעודי (payload) של JSON לא כולל את האובייקט Name, אבל מציינים את Name כנתיב במדיניות, אז השגיאה הזו מתרחשת.
steps.extractvariables.JsonPathParsingFailure 500 השגיאה הזו מתקבלת כשהמדיניות לא יכולה לנתח נתיב JSON צריך לחלץ נתונים ממשתנה הזרימה שצוין ברכיב Source. בדרך כלל זה קורה אם משתנה הזרימה שצוין ברכיב Source לא קיים .
steps.extractvariables.SetVariableFailed 500 השגיאה הזו מתקבלת אם המדיניות לא הצליחה להגדיר את הערך למשתנה. בדרך כלל השגיאה מתרחשת אם מנסים להקצות ערכים למספר משתנים שהשמות שלהם מתחילים עם אותן המילים, בפורמט שמופרד באמצעות נקודות.
steps.extractvariables.SourceMessageNotAvailable 500 השגיאה הזו מתקבלת אם ההודעה המשתנה שמצוין באלמנט Source של המדיניות היא:
  • לא בהיקף (לא זמין בתהליך הספציפי שבו המדיניות מופעלת) או
  • לא ניתן לפתרון (לא מוגדר)
steps.extractvariables.UnableToCast 500 השגיאה הזו מתקבלת אם המדיניות לא הצליחה להפעיל Cast של התוכן שחולץ. למשתנה. בדרך כלל זה קורה אם מנסים להגדיר ערך מסוג נתונים אחד למשתנה מסוג נתונים אחר.

שגיאות פריסה

השגיאות האלו עשויות להתרחש כאשר פורסים שרת proxy שמכיל את המדיניות הזו.

שם השגיאה סיבה תיקון
NothingToExtract אם המדיניות לא מכילה אף אחד מהרכיבים URIPath, QueryParam, Header, FormParam, XMLPayload או JSONPayload, הפריסה של שרת ה-proxy ל-API נכשלה כי אין מה לחלץ.
NONEmptyPrefixMappedToEmptyURI שגיאה זו מתרחשת אם למדיניות יש קידומת שהוגדרה הרכיב Namespace מתחת לרכיב XMLPayload, אבל לא קיים URI מוגדר.
DuplicatePrefix שגיאה זו מתרחשת אם למדיניות יש אותה קידומת שהוגדרה יותר מ- פעם אחת ברכיב Namespace מתחת לרכיב XMLPayload.
NoXPathsToEvaluate אם המדיניות לא כוללת את הרכיב XPath בתוך XMLPayload, אז הפריסה של שרת ה-proxy ל-API נכשלה עם השגיאה הזו.
EmptyXPathExpression אם המדיניות כוללת ביטוי XPath ריק בתוך XMLPayload אז הפריסה של שרת ה-proxy ל-API נכשלת.
NoJSONPathsToEvaluate אם המדיניות לא כוללת את הרכיב JSONPath בתוך JSONPayload, אז הפריסה של שרת ה-proxy ל-API נכשלה עם השגיאה הזו.
EmptyJSONPathExpression אם המדיניות כוללת ביטוי XPath ריק בתוך XMLPayload, הפריסה של שרת ה-proxy ל-API נכשלת.
MissingName אם המדיניות לא כוללת את המאפיין name באף אחת מהמדיניות רכיבים כמו QueryParam, Header, FormParam או Variable, כאשר הדבר נדרש, הפריסה של שרת ה-proxy ל-API נכשלת.
PatternWithoutVariable אם המדיניות לא כוללת משתנה בתוך הרכיב Pattern, הפריסה של שרת ה-proxy ל-API נכשלת. לרכיב Pattern נדרש השם של המשתנה שבו יאוחסנו הנתונים שחולצו.
CannotBeConvertedToNodeset אם המדיניות כוללת ביטוי XPath שבו הסוג Variable מוגדר כ-nodeset, אבל לא ניתן להמיר את הביטוי ל-Nodeset, הפריסה של שרת ה-proxy ל-API נכשלת.
JSONPathCompilationFailed המדיניות לא הצליחה להדר נתיב JSON שצוין.
InstantiationFailed לא ניתן ליצור מופע של המדיניות.
XPathCompilationFailed אם הקידומת או הערך שנעשה בהם שימוש ברכיב XPath אינם חלק מרחבי שמות שהוצהרו במדיניות, ואז הפריסה של שרת ה-proxy ל-API נכשל.
InvalidPattern אם הגדרת הרכיב Pattern לא חוקית באחד מהרכיבים כמו URIPath, QueryParam, Header, FormParam, XMLPayload או JSONPayload במסגרת המדיניות, ואז פריסת ה-Proxy ל-API נכשל.

משתני כשל

המשתנים האלה מוגדרים כשהמדיניות הזו גורמת לשגיאה בזמן הריצה. לקבלת מידע נוסף, ראה מה לדעת על שגיאות שקשורות למדיניות.

משתנים איפה דוגמה
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>

סכימות

נושאים קשורים

ניתוח API תוכן של הודעות באמצעות ניתוח נתונים בהתאמה אישית

הפניה למשתנים