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

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

מה

המדיניות ceVariables מחלצת תוכן מבקשה או מתגובה ומגדירה את הערך של משתנה לתוכן הזה. אפשר לחלץ כל חלק מההודעה, כולל כותרות, נתיבי URI, מטענים ייעודיים (payloads) של JSON/XML, פרמטרים של טפסים ופרמטרים של שאילתות. כדי לעשות את זה, המערכת מחילה תבנית טקסט על תוכן ההודעה ומגדירה משתנה עם תוכן ההודעה שצוין, אחרי שהיא מוצאת התאמה.

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

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

סרטונים

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

וידאו התיאור
חילוץ משתנים ממטען ייעודי של XML יש לחלץ משתנים ממטען ייעודי של XML באמצעות המדיניות 'חילוץ משתנה'.
חילוץ משתנים ממטען ייעודי של JSON יש לחלץ משתנים ממטען ייעודי (payload) של JSON באמצעות המדיניות 'חילוץ משתנה'.
חילוץ משתנים מפרמטרים חלץ משתנים מפרמטרים כגון פרמטרים של שאילתה, כותרת, טופס או URI.
חילוץ משתנים מפרמטרים עם ערכים מרובים מחלצים משתנים מפרמטרים עם ערכים מרובים.
חילוץ משתנים מפרמטר של שאילתה (קלאסי Edge) חלץ משתנים מפרמטר של שאילתה באמצעות ממשק המשתמש הקלאסי של Edge.
חילוץ משתנים ממטען ייעודי של XML או JSON (קלאסי Edge) אפשר לחלץ משתנים ממטען ייעודי (payload) של XML או של JSON באמצעות ממשק המשתמש הקלאסי של Edge.

טעימות

הדוגמאות של קוד המדיניות ממחישות איך לחלץ משתנים מהסוגים הבאים של פריטי המידע שנוצרו בתהליך הפיתוח (Artifact):

GitHub

הקישורים מפנים אל דוגמאות של שרת proxy פעיל ל-API שניתן לפרוס ולהפעיל ב-Edge. הם משתמשים ב-extracts והם נמצאים במאגר api-platform-samples של Apigee ב-GitHub. ברכיבי ה-README מוסברים איך משתמשים ב-extracts בכל מקרה, ואיך לפרוס ולהריץ כל דגימה.

מזהי 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> מורה למדיניות extracts לחלץ מידע מנתיב ה-URI. הרכיב <Pattern> מציין את הדפוס שיש להחיל על נתיב ה-URI. הדפוס מטופל כתבנית פשוטה, כאשר הסוגריים המסולסלים מציינים את החלק המשתנה של נתיב ה-URI.

שם המשתנה שנקבע נקבע לפי הערך שצוין ברכיב <VariablePrefix>, וכן לפי הערך שמוקף בסוגריים מסולסלים {} ברכיב <Pattern>. שני הערכים מחוברים באמצעות נקודה באמצע, וכך למשל שם המשתנה urirequest.id. אם אין רכיב <VariablePrefix>, שם המשתנה הוא רק הערך שמוקף בסוגריים מסולסלים.

כדאי לעיין בקוד המדיניות לדוגמה שלמעלה בעבודה עם הבקשה הנכנסת הבאה:

GET http://org1-test.apigee.net/svc1/accounts/12797282

נניח שנתיב הבסיס של ה-API Proxy הוא /svc1. כש-Apigee Edge מחיל את קוד המדיניות extracts שלמעלה על הבקשה הנכנסת הזו, המשתנה 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 מחיל את קוד המדיניות extracts שלמעלה על הבקשה הנכנסת הזו, המשתנה 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". כדי להתייחס לפרמטרים של השאילתה האלה במדיניות extracts, עליך להשתמש באינדקסים: למופע הראשון של פרמטר השאילתה אין אינדקס, למופע השני באינדקס 2, למופע השלישי באינדקס 3 וכו'.

כדאי לעיין בקוד המדיניות לדוגמה שלמעלה בעבודה עם הבקשה הנכנסת הבאה:

GET http://org1-test.apigee.net/weather?w=Boston&w=Chicago

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

כש-Apigee Edge מחיל את קוד המדיניות extracts שלמעלה על הכותרת הזו, המשתנה 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 מחיל את קוד המדיניות extracts שלמעלה על הודעת ה-JSON הזו, הוא מגדיר שני משתנים: geocoderesponse.latitude ו-geocoderesponse.longitude. שני המשתנים משתמשים באותה תחילית של משתנה geocoderesponse. הסיומת של המשתנים האלה מצוינת במפורש באמצעות מאפיין name של הרכיב <Variable>.

המשתנה geocoderesponse.latitude מקבל את הערך 37.42291810. המשתנה geocoderesponse.longitude מקבל את הערך -122.08542120.

עכשיו אפשר לגשת למשתנה geocoderesponse.latitude בשרת ה-proxy. לדוגמה, המדיניות הבאה של assignMessage מעתיקה אותה לכותרת בשם 'קו רוחב' בתשובה:

<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 מחיל את קוד המדיניות extracts שלמעלה על הודעת ה-XML הזו, היא מגדירה שלושה משתנים: directionsresponse.travelmode, directionsresponse.duration ו-directionsresponse.timeunit. לכל המשתנים יש תחילית זהה של directionsresponse למשתנים. הסיומת של המשתנים האלה מצוינת במפורש באמצעות מאפיין name של הרכיב <Variable>.

המשתנה 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>

מידע על המדיניות בנושא extracts

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

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

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

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

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

היקף

למשתנים שמוגדרים עם המדיניות extracts יש היקף גלובלי. במילים אחרות, אחרי שבמדיניות extracts מוגדרת משתנה חדש, אפשר לגשת למשתנה הזה מכל מדיניות או קוד בכל שלב בתהליך (שמתרחש אחרי המדיניות ex Variables). האיסור הזה כולל:

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

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

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

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

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

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

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

בדוגמה הזו, המשתנה urirequest.pathSeg מוגדר למה שמופיע ב-proxy.pathsuffix אחרי '/a/'. לדוגמה, נניח שהנתיב הבסיסי של שרת ה-API של ה-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>

נניח, לגבי שרת Proxy ל-API עם נתיב בסיס /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

כדי להפנות לפרמטרים של השאילתה האלה במדיניות extracts, עליך להשתמש באינדקסים: למופע הראשון של פרמטר השאילתה אין אינדקס, למופע השני באינדקס 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/cbar" ו-".a/foo/foo/bar/cbar".

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

*;charset={encoding}

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

אם הערך שהועבר למדיניות extracts מכיל תו מיוחד, כגון '{', עליך להשתמש בתו '%' כדי לסמן אותו בתו בריחה (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, המערכת לא יוצרת את המשתנה המתאים.

בדוגמה הבאה מוצגת מדיניות extracts שמאכלסת שני משתנים מגוף ה-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>

הפניה לרכיב

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

<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

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

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

לא רלוונטי נדרש
continueOnError

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

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

false אופציונלי
enabled

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

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

true אופציונלי
async

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

false הוצא משימוש

רכיב <DisplayName>

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

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

לא רלוונטי

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

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

רכיב <Source>

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

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

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

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

מאפיינים

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

צריך להגדיר את הערך true כדי לנקות את המטען הייעודי שצוין ב-<Source> אחרי חילוץ הנתונים ממנו.

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

false

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

אלמנט <VariablePrefix>

(אופציונלי) כדי ליצור את השם המלא של המשתנה, צריך לצרף את <VariablePrefix>, נקודה לשם שהגדרת ב{סוגריים מסולסלים} ברכיב <Pattern> או ברכיב <Variable>. לדוגמה: myprefix.id, myprefix.dbncode או myprefix.oauthtoken.

<VariablePrefix>myprefix</VariablePrefix>

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

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

הרכיב <ignoreUnresolvedVariables>>

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

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

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

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

אלמנט <URIPath>

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

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

ניתן להשתמש במספר רכיבי <Pattern>:

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

מאפיינים

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

false

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

האלמנט <QueryParam>

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

<QueryParam name="code">
   <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
</QueryParam>

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

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

מאפיינים

מאפיין התיאור ברירת המחדל נוכחות תיאור
name מציין את שם הפרמטר של השאילתה. אם לכמה פרמטרים של שאילתה יש שם זהה, צריך להשתמש בהפניות לאינדקס, שבהן למופע הראשון של פרמטר השאילתה אין אינדקס, השני נמצא באינדקס 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>.
סוג: לא רלוונטי

מאפיינים

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

לא רלוונטי

נדרש מחרוזת

אלמנט <FormParam>

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

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

מאפיינים

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

לא רלוונטי

נדרש מחרוזת

רכיב <Variable>

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

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

כך מחלצים שני ערכים מהמשתנה:

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

מאפיינים

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

לא רלוונטי

נדרש מחרוזת

רכיב <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.
סוג: לא רלוונטי

מאפיינים

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

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

name

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

מחרוזת. אלה רמות הפירוט האפשריות:

  • מחרוזת
  • boolean
  • מספר שלם
  • long
  • float
  • כפולה
  • מערך צמתים (מחזיר מקטע JSON)

רכיב <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

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

false

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

רכיב <XMLPayload>/<Namespaces>

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

<XMLPayload stopPayloadProcessing="false">
  <Namespaces>
     <Namespace prefix="apigee">http://www.apigee.com</Namespace>
     <Namespace prefix="gmail">http://mail.google.com</Namespace>
  </Namespaces>
  <Variable name="legName" type="string">
    <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
  </Variable>
</XMLPayload>

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

<XMLPayload stopPayloadProcessing="false">
  <!-- <Namespaces/> -->
  <Variable name="legName" type="string">
    <XPath>/Directions/route/leg/name</XPath>
  </Variable>
</XMLPayload>
ברירת מחדל: לא רלוונטי
נוכחות: אופציונלי
סוג: מחרוזת

מאפיינים

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

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

לא רלוונטי

נדרש מחרוזת

רכיב <XMLPayload>/<Variable>

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

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

מאפיינים

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

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

name

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

מחרוזת. אלה רמות הפירוט האפשריות:

  • מחרוזת
  • boolean
  • מספר שלם
  • long
  • float
  • כפולה
  • מערך צמתים (מחזיר מקטע XML)

רכיב <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

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

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

שגיאות בפריסה

השגיאות האלה יכולות להתרחש כשפורסים שרת 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, הפריסה של שרת ה-API של שרת ה-API תיכשל. הרכיב Pattern מחייב את שם המשתנה שבו יאוחסנו הנתונים שחולצו.
CannotBeConvertedToNodeset אם במדיניות יש ביטוי XPath שבו הסוג Variable מוגדר כצומת, אבל לא ניתן להמיר את הביטוי לקבוצת צמתים, הפריסה של שרת ה-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 באמצעות ניתוח נתונים בהתאמה אישית

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