המדיניות בנושא 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=&quo>t;t<rue" n>ame="<;GetURIPath&>quo<t;<>/span>
  Dis<playNam>eGetXML<Var/DisplayName
  A>dd
    Headers
      Header nam<e=">;tmod<e"{>dir<ecti>ons<response.travelmode}/Head>er
 <   /Headers
  /Add
  Ignor>eUn<resolvedVariablestrue/IgnoreUnresolvedVariables
  AssignTo >c<reateNew=">;false" transport="http" type="request"/
/AssignMessage

מידע על המדיניות tractVariables

מפתחי API בונים שרתי proxy ל-API שמתנהגים באופן שונה בהתאם לתוכן ההודעות, כולל כותרות, נתיבי URI, מטענים ייעודיים ופרמטרים של שאילתות. לעיתים קרובות, שרת ה-proxy מחלץ חלק חלק מהתוכן הזה לשימוש בהצהרת תנאי. כדי לבצע את הפעולה הזו, צריך להשתמש במדיניות ExtensionVariables הזה.

כשמגדירים את המדיניות TransVariables, אפשר לבחור:

  • שמות המשתנים להגדרה
  • מקור המשתנים
  • כמה משתנים צריך לחלץ ולהגדיר

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

כדי לראות כיצד ניתן להשתמש במשתני חילוץ כדי ליצור דוחות Analytics מבוססי-תוכן, ניתוח תוכן של הודעות API באמצעות ניתוח נתונים בהתאמה אישית.

היקף

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

  • PreFlow: ProxyEndpoint ו-TargetEndpoint (בקשה ותגובה)
  • PostFlow: ProxyEndpoint ו-TargetEndpoint (בקשה ותגובה)
  • PostClientFlow: ProxyEndpoint (תגובה בלבד, באמצעות התחילית של מדיניות בנושא רישום הודעות)
  • תהליכים של שגיאות

מידע על התאמה ויצירת משתנים

המדיניות tractVariables שולפת מידע מבקשה או מתגובה וכותבת למשתנה. לגבי כל סוג מידע שאפשר לחלץ, כמו נתיב ה-URI או נתוני XML, מציינים את הדפוס שצריך להתאים ואת שם המשתנה שמשמש לשמירת התחילית שחולץ.

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

נתיבי URI תואמים, פרמטרים של שאילתות, כותרות, פרמטרים של טפסים ומשתנים

כשמחלצים מידע מנתיב URI, פרמטרים של שאילתה, כותרות, פרמטרים של טפסים שבהם משתמשים בתג &lt;Pattern&gt; כדי לציין אחד או יותר ולהתאים אותם אישית. לדוגמה, הדוגמה הבאה למדיניות מציגה דפוס תואם אחד של נתיב ה-URI:

<ExtractVariables name="ExtractVariabl>es-1<">
   Sou<rcerequ>est/<Source
>   URIP<ath
      Pattern ignoreC>ase="tr<ue">/a/{<pathSeg}>/Pat<tern
   /URIPa>th
   Vari<ablePrefixurire>ques<t/VariablePrefix
   Ignor>eUnr<esolvedVariablestrue/Ignor>e<UnresolvedVariabl>es
/ExtractVariables

בדוגמה הזו, המשתנה urirequest.pathSeg מוגדר למה שמופיע ב-Proxy.pathsuffix אחרי '/a/'. לדוגמה, נניח שהנתיב הבסיסי של שרת ה-proxy ל-API הוא /basepath/v1 . עם בקשה נכנסת אל http://myCo.com/basepath/v1/a/b מוגדר ל-"b".

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

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

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

בדוגמה הבאה, יוצרים מדיניות שמכילה שלוש תבניות תואמות ל-URI path:

<ExtractVariables name="ExtractVariabl>es-1<">
   Sou<rcerequ>est/<Source
>   URIP<ath
      Pattern ignoreC>ase="tr<ue">/a/{pat<hSeg}/Pattern
      Patte>rn ignoreCase=<"tr>ue"<;/a/b/{pathSeg}/Pattern
 >     Pattern ign<oreCase=>&quo<t;true&q>uot;</a/b/c/{pathSe>g}/Pattern<
   /URIPath
  > Var<iablePrefixurirequest/Var>iabl<ePrefix
   IgnoreUnresolve>d<Variablestrue/Ign>oreUnresolvedVariables
/ExtractVariables

נניח שלשרת Proxy ל-API עם הנתיב Basepath של /basepath/v1, כתובת ה-URL של הבקשה הנכנסת. ל-proxy ל-API בצורה הבאה:

http://myCo.com/basepath/v1/a/b

בדוגמה הזו, הדפוס הראשון תואם ל-URI והמשתנה urirequest.pathSeg הוא מוגדר ל-'b'.

אם כתובת ה-URL של הבקשה היא:

http://myCo.com/basepath/v1/a/b/c/d

...הדפוס השלישי תואם והמשתנה urirequest.pathSeg הוא מוגדר ל-'d'.

ציון תבניות עם משתנים מרובים

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

<ExtractVariables name="ExtractVariabl>es-1<">
   Sou<rcerequ>est/<Source
>   URIP<ath
      Pattern ignoreC>ase="tr<ue">/a/{pat<hSeg}/Pattern
      Patte>rn ignoreCase=<"tr>ue"<;/a/b/{pathSeg}/Pattern
 >     Pattern ignoreCase=&q<uot;true>&quo<t;/a/{pa>thSe<g1}/c/{pathSeg>2}/Pattern<
   /URIPath
  > Var<iablePrefixurirequest/Var>iabl<ePrefix
   IgnoreUnresolve>d<Variablestrue/Ign>oreUnresolvedVariables
/ExtractVariables

שוב שימוש בשרת proxy ל-API עם נתיב הבסיס של /basepath/v1 , לבקשה הנכנסת כתובת ה-URL:

http://myCo.com/basepath/v1/a/b/c/d

...המשתנה urirequest.pathSeg1 הוא מוגדר ל-"b" והמשתנה urirequest.pathSeg2 הוא מוגדר ל-'d'.

התאמה של מספר מופעים בדפוס

אתם יכולים להתאים תבניות גם כאשר יש כמה מופעים של פריט עם אותו שם. לדוגמה, אפשר לשלוח בקשה שמכילה כמה פרמטרים של שאילתה או כמה כותרות עם אותו שם. הבקשה הבאה מכילה שני פרמטרים של שאילתה שנקראים 'w':

http://myCo.com/basepath/v1/a/b/c/d?w=1&w=2

כדי להפנות לפרמטרים של השאילתה האלה במדיניות extractVariables, משתמשים באינדקסים, כאשר המופע הראשון של פרמטר השאילתה לא מכיל אינדקס, המופע השני נמצא באינדקס 2 והשלישי ב- אינדקס 3 וכו'. לדוגמה, המדיניות הבאה מחלצת את הערך של פרמטר השאילתה השני בשם 'w' בבקשה:

<ExtractVariables name="ExtractVariabl>es-1<">
   Sou<rcerequ>est/<Source
   QueryParam >name=&q<uot;w.2"
      Patte>rn ignore<Case=&qu>ot;t<rue"{s>econ<dW}/Pattern
  > /QueryPar<am
   VariableP>refi<xurirequest/VariablePrefi>x
  < IgnoreUnresolvedVariables>t<rue/IgnoreUnresol>vedVariables
/ExtractVariables

המשתנה urirequest.secondW הוא מוגדר ל-'2'. אם פרמטר השאילתה השני יושמט מהבקשה, המשתנה urirequest.secondW ריק. אפשר להשתמש בהוספה לאינדקס בכל פעם שיש מספר פריטים עם אותו שם בבקשה.

שימוש בתווים מיוחדים בתבנית

כשמתאימים בין נתיבי URI, אפשר להשתמש בסימן '*' וגם '**' בתווים כלליים לחיפוש בתבנית, איפה:

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

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

<URIPath>
  <Pattern ignoreCase=">true"<;/a/*/{i>d}/<Pattern
  Pattern ignoreC>ase="<true&quo>t<;/a/**/{>id}/Pattern
/URIPath

הדפוס הראשון תואם לבקשות עם נתיבים (החלק של נתיב ה-URI שאחרי ה-basepath), למשל " /a/b/c", "/a/foo/bar" וכו'. הדפוס השני תואם לכל מספר של נתיב פלחים אחרי "/a/", למשל "/a/foo/bar/baz/c", וגם "/a/b/c" ו-" /a/foo/bar".

כשמציינים דפוסים לפרמטרים של שאילתות, לכותרות ולפרמטרים של טפסים, התו '*' מציין התאמה לכל מספר של תווים. לדוגמה, כשמתאימים כותרת, צריך לציין את דפוס כ:

*;charset={encoding}

הדפוס הזה תואם לערכים 'text/xml;charset=UTF-16' וגם 'application/xml;charset=ASCII'.

אם הערך שמועבר למדיניות tractVariables מכיל תו מיוחד, כמו "{", השתמשו ב"%" כדי לסמן בתו בריחה (escape). הדוגמה הבאה תורמת לסימון בתו בריחה (escape) של "{" ו-"}" תווים בדפוס כי הם משמשים כתווים מילוליים בערך השאילתה :

<QueryParam>
  <Pattern ignoreCase=">true"%{use<r%} {nam>e<}/Pattern
/>QueryParam

בדוגמה הזו, הדפוס תואם לערך '{user} Steve' אבל לא את הערך user סטיב".

JSON ו-XML תואמים

כשמחלצים נתונים מ-JSON ומ-XML, צריך לציין תג &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="t>oke<n"
  Pattern ignoreC>ase="tr<ue">{<tokenValue}>/Pa<ttern
/QueryParam
 
!-- Overwrite tokenValue even if it was found in> <query parameter. -->
He<ader name="Token&quo>t;
  Pattern< ignoreC>a<se=&quo>t;true"{tokenValue}/Pattern
/Header

שליטה במה שקורה כשאין התאמה

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

אפשרות אחת היא להגדיר את <IgnoreUnresolvedVariables> ל- במדיניות שמפנה את המשתנה כדי להגדיר את המדיניות לטיפול כל משתנה שלא ניתן לפתרון כמחרוזת ריקה (null):

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>

הפניה לרכיב

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

<ExtractVariables async="false" continueOnError="false" enabled="true&qu>ot; <name=">Extract-Variables-1<"
   Di>spla<yNameExtract Variables 1/Display>Name
  < Source> cle<arPayload=&quo>t;true|f<alse"reque>st/S<ource
   VariablePrefixmy>prefix/Var<iablePrefix
   IgnoreUnres>olve<dVariab>lestrue<|false/IgnoreUnresolvedVar>iables
   URIP<ath
    >  Pa<ttern ig>nore<Case="false">/accoun<ts/{id}/Pattern
   /URIPa>th
   QueryP<aram nam>e=&q<uot;code&qu>ot;
<      Pattern ignoreCase=&q>uot;tru<e"DBN{dbncode}/Patter>n
   /QueryParam
  < Header >name<=">Auth<orization"
      Pat>tern ig<noreCas>e="fals<e"B>eare<r {oauthto>ken}</Pattern
   /Header
   FormPara>m name=&<quot;gr>eeting"<
      P>atte<rnhello {>user<}/Pattern
 >  /Form<Param
   Variable na>me="r<equest.c>ontent&qu<ot;
     >  Patte<rnhello {>user<}/Pattern
  > /Va<riable
   JSONPayload
      Variable nam>e="<;name">
      <   JSONPath{example}/JSONPath
     > /Variable<
   />JSONPayload
 <  XMLP>ayload <stopPaylo>adPr<ocessing=&q>u<ot;false"
  >    Namespaces/
      Variable name="name" type="boolean"
         XPath/test/example/XPath
      /Variable
   /XMLPayload
/ExtractVariables

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

<ExtractVariables async="false" continueOnError="false" enabled="true&qu>ot; 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|f>alse&qu<ot;requ>est/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";:&quot;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="f>alse"/acc<ounts/{i>d<}/Patter>n
/URIPath

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

<URIPath>
   <Pattern ignoreCase="f>alse"/acc<ounts/{i>d}/P<attern
   Pattern ignoreCa>se="false"/accounts/{id}/<transact>i<ons/{ind>ex}/Pattern
/URIPath
ברירת המחדל: לא רלוונטי
נוכחות: זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload>, או <XMLPayload>.
סוג: לא רלוונטי

מאפיינים

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

false

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

&lt;QueryParam&gt; רכיב

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

<QueryParam name=">code<"
   Pattern ignoreC>ase="tr<ue">D<BN{dbncode}>/Pattern
/QueryParam

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

<QueryParam name=">;w.2<"
   Pattern ignoreC>ase="<;true&qu>o<t;{secondW}>/Pattern
/QueryParam
ברירת המחדל: לא רלוונטי
נוכחות: זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload>, או <XMLPayload>.
סוג: לא רלוונטי

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות סוג
שם משמש לציון השם של פרמטר השאילתה. אם למספר פרמטרים של שאילתה יש אותו שם, השתמשו בהפניות לאינדקס, שבהן המופע הראשון של פרמטר השאילתה אין אינדקס, השני הוא באינדקס 2, השלישי באינדקס 3 וכו'

לא רלוונטי

חובה מחרוזת

&lt;Header&gt; רכיב

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

<!-- The name is the actual header name. -->
<Header name="Authoriza>t<ion"
!-- Provide a name for your new custom variabl>e he<re. --
   Pattern ignoreCa>se="false"<;Bearer >{<oauthto>ken}/Pattern
/Header

אם יש כמה כותרות בעלות שם זהה, השתמשו באינדקסים כדי להפנות לכותרות נפרדות מערך:

<Header name="myHead>er.2<"
   Pattern ignoreC>ase="true<"{s>e<condHea>der}/Pattern
/Header

או את הקוד הבא כדי להציג את כל הכותרות במערך:

<Header name="myHeader.va>lues<"
   Pattern ignoreC>ase="t<rue">;<{myHead>ers}/Pattern
/Header
ברירת המחדל: לא רלוונטי
נוכחות: זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload>, או <XMLPayload>.
סוג: לא רלוונטי

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות סוג
שם מציין את שם הכותרת שממנה מחלצים את הערך. אם מספר יש את אותו שם, משתמשות בהפניות לאינדקס, כאשר המופע הראשון של התג הכותרת לא מכילה אינדקס, השנייה היא באינדקס 2, השלישית באינדקס 3 וכו'. .values כדי לקבל את כל הכותרות במערך.

לא רלוונטי

חובה מחרוזת

&lt;FormParam&gt; רכיב

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

<FormParam name="gree>ting&<quot;
 >   Patternhe<llo {use>r<}/Pattern
>/FormParam
ברירת המחדל: לא רלוונטי
נוכחות: זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload>, או <XMLPayload>.
סוג: לא רלוונטי

מאפיינים

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

לא רלוונטי

חובה מחרוזת

&lt;Variable&gt; רכיב

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

<Variable name="m>yVar&<quot;
 >   Patternhe<llo {use>r<}/Pattern>
/Variable

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

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

מאפיינים

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

לא רלוונטי

חובה מחרוזת

&lt;JSONPayload&gt; רכיב

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

<JSONPayload>
   <Variable name="name" typ>e="<;string&>quot;
   <   JSONPa>th{e<xample}/J>S<ONPath
   /V>ariable
/JSONPayload
ברירת המחדל: לא רלוונטי
נוכחות: זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload>, או <XMLPayload>.
סוג: לא רלוונטי

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

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

<Variable name="name" typ>e=&q<uot;stri>ng"
<   JSONPa>t<h{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.cha<nnel.titl>e</JSONPath>
/Variable
ברירת המחדל: לא רלוונטי
נוכחות: חובה
סוג: מחרוזת

&lt;XMLPayload&gt; רכיב

(אופציונלי, אבל אפשר לעיין בשורה 'נוכחות' בטבלה שלמטה כדי לקבל מידע נוסף.) מציינת את הודעה בפורמט XML שממנה יחול הערך של המשתנה. מטענים ייעודיים (payloads) מסוג XML מחולצים רק כאשר הכותרת Content-Type של ההודעה. היא text/xml, application/xml, או application/*+xml.

<XMLPayload stopPayloadProcessing="f>als<e"
  >Namesp<aces
     Namespace prefi>x="apigee"h<ttp://www.>apigee<.com/Namespace
     Name>space prefix="gma<il"ht>tp:<//mail.goog>le.<com/Namespace
  /Namespaces
  Varia>ble na<me=&q>uot;name" type="b<oolean>&qu<ot;
     >X<Path/apigee>:test/apigee:example/XPath
  /Variable
/XMLPayload
ברירת המחדל: לא רלוונטי
נוכחות: זה שינוי אופציונלי. עם זאת, יש לכלול לפחות אחד מהפריטים הבאים: <URIPath>, <QueryParam>, <Header> <FormParam>, <JSONPayload>, או <XMLPayload>.
סוג: לא רלוונטי

מאפיינים

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

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

false

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

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

(אופציונלי) מציין את מרחב השמות שישמש בהערכת ה-XPath. אם אתם משתמשים מרחבי השמות בביטויי ה-XPath שלכם, עליכם להצהיר כאן על מרחבי השמות, כפי שמוצג בדוגמה הבאה.

<XMLPayload stopPayloadProcessing="f>als<e"
  >Namesp<aces
     Namespace prefi>x="apigee"h<ttp://www.>apigee<.com/Namespace
     Name>space prefix="gma<il"ht>tp:<//mail.goog>le.<com/Namespace
  /Namespaces
  Variabl>e nam<e=&qu>ot;legName" type="string"
    XPath/api<gee:Di>rec<tions/api>g<ee:route/ap>igee:leg/apigee:name/XPath
  /Variable
/XMLPayload

אם אתם לא משתמשים במרחבי שמות בביטויי ה-XPath שלכם, תוכלו להשמיט או להוסיף תגובה. <Namespaces>, כמו בדוגמה הבאה:

<XMLPayload stopPayloadProcessing="f>als<e&qu<ot;
  !-- N>ame>spa<ces/ --
  Variable name="legName>"<; typ>e="string"
    X<Path/D>ire<ctions/ro>u<te/leg/name>/XPath
  /Variable
/XMLPayload
ברירת המחדל: לא רלוונטי
נוכחות: אופציונלי
סוג: מחרוזת

מאפיינים

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

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

לא רלוונטי

חובה מחרוזת

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

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

<Variable name="name" type>=&qu<ot;bo>olean"
 <  XPat>h</test/exa>mple/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>=&qu<ot;bo>olean"
 <  XPat>h</test/exa>mple/XPath
/Variable

דוגמה עם מרחב שמות. אם אתם משתמשים במרחבי שמות בביטויי XPath, עליכם להצהיר (declare) מרחבי השמות בקטע <XMLPayload><Namespaces> של המדיניות.

<Variable name="name" type>=&qu<ot;bo>olean"
   XPath/<foo:te>s<t/foo:exa>mple/XPath
/Variable
ברירת המחדל: לא רלוונטי
נוכחות: חובה
סוג: מחרוזת

התייחסות לשגיאות

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.extractvariables.ExecutionFailed 500

This error occurs when:

  • The input payload (JSON, XML) is empty.
  • The input (JSON, XML, etc) passed to the policy is invalid or malformed.
steps.extractvariables.ImmutableVariable 500 A variable used in the policy is immutable. The policy was unable to set this variable.
steps.extractvariables.InvalidJSONPath 500 This error occurs if an invalid JSON path is used in the JSONPath element of the policy. For example, if a JSON payload does not have the object Name, but you specify Name as the path in the policy, then this error occurs.
steps.extractvariables.JsonPathParsingFailure 500 This error occurs when the policy is unable to parse a JSON path and extract data from the flow variable specified in Source element. Typically this happens if the flow variable specified in the Source element does not exist in the current flow.
steps.extractvariables.SetVariableFailed 500 This error occurs if the policy could not set the value to a variable. The error generally happens if you try to assign values to multiple variables whose names start with the same words in a nested dot-separated format.
steps.extractvariables.SourceMessageNotAvailable 500 This error occurs if the message variable specified in the Source element of the policy is either:
  • Out of scope (not available in the specific flow where the policy is being executed) or
  • Can't be resolved (is not defined)
steps.extractvariables.UnableToCast 500 This error occurs if the policy was unable to cast the extracted value to a variable. Typically this happens if you attempt to set the value of one data type to a variable of another data type.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
NothingToExtract If the policy does not have any of the elements URIPath, QueryParam, Header, FormParam, XMLPayload, or JSONPayload, the deployment of the API Proxy fails, because there's nothing to extract.
NONEmptyPrefixMappedToEmptyURI This error occurs if the policy has a prefix defined in the Namespace element under the XMLPayload element, but no URI is defined.
DuplicatePrefix This error occurs if the policy has the same prefix defined more than once in the Namespace element under the XMLPayload element.
NoXPathsToEvaluate If the policy does not have the XPath element within the XMLPayload element, then the deployment of the API proxy fails with this error.
EmptyXPathExpression If the policy has an empty XPath expression within the XMLPayload element, then the deployment of the API proxy fails.
NoJSONPathsToEvaluate If the policy does not have the JSONPath element within the JSONPayload element, then the deployment of the API proxy fails with this error.
EmptyJSONPathExpression If the policy has an empty XPath expression within the XMLPayload element, then the deployment of the API proxy fails.
MissingName If the policy does not have the name attribute in any of the policy elements like QueryParam, Header, FormParam or Variable, where it is required, then the deployment of the API proxy fails.
PatternWithoutVariable If the policy does not have a variable specified within the Pattern element, then the deployment of the API proxy fails. The Pattern element requires the name of the variable in which extracted data will be stored.
CannotBeConvertedToNodeset If the policy has an XPath expression where the Variable type is defined as nodeset, but the expression cannot be converted to nodeset, then the deployment of the API proxy fails.
JSONPathCompilationFailed The policy could not compile a specified JSON Path.
InstantiationFailed The policy could not be instantiated.
XPathCompilationFailed If the prefix or the value used in the XPath element is not part of any of the declared namespaces in the policy, then the deployment of the API proxy fails.
InvalidPattern If the Pattern element definition is invalid in any of the elements like URIPath, QueryParam, Header, FormParam, XMLPayload or JSONPayload within the policy, then the deployment of the API proxy fails.

Fault variables

These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name = "SourceMessageNotAvailable"
extractvariables.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. extractvariables.EV-ParseJsonResponse.failed = true

Example error response

{
   "fault":{
      "detail":{
         "errorcode":"steps.extractvariables.SourceMessageNotAvailable"
      },
      "faultstring":"request message is not available for ExtractVariable: EV-ParseJsonResponse"
   }
}

Example fault rule

<FaultRule name="Extract Variable Faults">
    <Step>
        <Name>AM-CustomErrorMessage</Name>
        <Condition>(fault.name = "SourceMessageNotAvailable") </Condition>
    </Step>
    <Condition>(extractvariables.EM-ParseJsonResponse.failed = true) </Condition>
</FaultRule>

סכימות

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

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

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