מדיניות AssignMessage

מוצג המסמך של Apigee Edge.
עוברים אל מסמכי תיעוד של Apigee X.
מידע

מה

המדיניות AssignMessage משתנה או יוצרת הודעות של בקשות ותשובות חדשות במהלך התהליך של שרת proxy ל-API. המדיניות מאפשרת לכם לבצע את הפעולות הבאות לגבי ההודעות האלה:

  • הוספה של פרמטרים חדשים של טופס, כותרות או פרמטרים חדשים של שאילתות להודעה
  • העתקה של נכסים קיימים מהודעה אחת לאחרת
  • הסרה של כותרות, פרמטרים של שאילתות, פרמטרים של טפסים ו/או הודעה מטענים ייעודיים (payloads) מהודעה
  • הגדרה של הערך של הנכסים הקיימים בהודעה

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

באמצעות מדיניות AssignMessage אפשר ליצור או לשנות משתני זרימה עם הצאצא הבא רכיבים:

רכיב <AssignMessage>

מגדיר מדיניות AssignMessage.

ערך ברירת מחדל מידע נוסף מופיע בכרטיסייה מדיניות ברירת המחדל למטה
חובה? חובה
סוג אובייקט מורכב
רכיב הורה לא רלוונטי
רכיבים צאצאים <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

הרכיב <AssignMessage> משתמש בתחביר הבא:

תחביר

הרכיב <AssignMessage> משתמש בתחביר הבא:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <!-- All AssignMessage child elements are optional -->
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>

  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>

  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>

  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>

  <DisplayName>policy_display_name</DisplayName>

  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>

  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>

  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</AssignMessage>

מדיניות ברירת המחדל

הדוגמה הבאה מציגה את הגדרות ברירת המחדל כשמוסיפים מדיניות AssignMessage בממשק המשתמש של Edge:

<AssignMessage continueOnError="false" enabled="true" name="assign-message-default">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <Copy source="request">
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <Payload/>
    <Verb/>
    <StatusCode/>
    <ReasonPhrase/>
    <Path/>
  </Copy>
  <Remove>
    <Headers>
      <Header name="h1"/>
    </Headers>
    <QueryParams>
      <QueryParam name="q1"/>
    </QueryParams>
    <FormParams>
      <FormParam name="f1"/>
    </FormParams>
    <Payload/>
  </Remove>
  <Add>
    <Headers/>
    <QueryParams/>
    <FormParams/>
  </Add>
  <Set>
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <!-- <Verb>GET</Verb> -->
    <Path/>
  </Set>
  <AssignVariable>
    <Name>name</Name>
    <Value/>
    <Ref/>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

כשמוסיפים מדיניות AssignMessage חדשה לממשק המשתמש של Edge, התבנית מכילה stubs לכל פעולות אפשריות. בדרך כלל, אתה בוחר אילו פעולות ברצונך לבצע עם המדיניות הזו ומסירים את שאר הרכיבים של הצאצא. לדוגמה, כדי לבצע פעולת העתקה, השתמשו <Copy> ולהסיר את <Add>, <Remove> ורכיבי צאצא אחרים כדי להפוך אותה לקריאה יותר.

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

מאפיין ברירת מחדל חובה? תיאור
name לא רלוונטי נדרש

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

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

continueOnError false אופציונלי צריך להגדיר את הערך 'False' כדי להחזיר שגיאה כשהמדיניות נכשלת. זו התנהגות צפויה ברוב סוגי המדיניות. הערך של הפרמטר הוא TRUE כדי שביצוע הפעולות יתבצע גם אחרי שמדיניות תיכשל.
enabled true אופציונלי כדי לאכוף את המדיניות צריך להגדיר את הערך True. מגדירים את המדיניות כ-"false" כדי "להשבית" את המדיניות. המדיניות הזו לא תיאכף גם אם היא תצורף לתהליך.
async   false הוצא משימוש המאפיין הזה הוצא משימוש.

הטבלה הבאה מספקת תיאור ברמה גבוהה של רכיבי הצאצא של <AssignMessage>:

רכיב צאצא חובה? תיאור
פעולות נפוצות
<Add> אופציונלי מוסיף מידע לאובייקט ההודעה שצוין על ידי רכיב <AssignTo>.

<Add> מוסיף להודעה כותרות או פרמטרים שלא קיימים בהודעה המקורית הודעה. כדי להחליף כותרות או פרמטרים קיימים, משתמשים ברכיב <Set>.

<Copy> אופציונלי העתקת מידע מההודעה שצוינה ב-source לאובייקט ההודעה שצוין על ידי הרכיב <AssignTo>.
<Remove> אופציונלי מוחקת את הרכיבים שצוינו ממשתנה ההודעה שצוין <AssignTo>.
<Set> אופציונלי הפונקציה מחליפה ערכים של מאפיינים קיימים בבקשה או בתגובה, שצוינו באמצעות את הרכיב <AssignTo>.

<Set> מחליף כותרות או פרמטרים שכבר קיימים במקור הודעה. כדי להוסיף כותרות או פרמטרים חדשים, משתמשים ברכיב <Add>.

רכיבי צאצא אחרים
<AssignTo> אופציונלי מציינת באיזו הודעה המדיניות AssignMessage פועלת. זה יכול להיות בקשה או תשובה, או הודעה חדשה ומותאמת אישית.
<AssignVariable> אופציונלי מקצה ערך למשתנה זרימה. אם המשתנה לא קיים, אז <AssignVariable> יוצר אותה.
<IgnoreUnresolvedVariables> אופציונלי המדיניות הזו קובעת אם העיבוד ייפסק כשנתקלים במשתנה שלא זוהה.

כל אחד מהרכיבים הצאצאים האלה מתואר בקטעים הבאים.

דוגמאות

בדוגמאות הבאות מתוארות חלק מהדרכים לשימוש במדיניות AssignMessage מדיניות:

1: הוספת כותרת

הדוגמה הבאה מוסיפה כותרת לבקשה עם המאפיין רכיב <Add>:

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

2: הסרת מטען ייעודי (payload)

בדוגמה הבאה נמחק המטען הייעודי (Payload) מהתשובה עם <Remove>. רכיב:

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

3: שינוי התשובה

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

<AssignMessage name="modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" type="response"></AssignTo>
</AssignMessage>

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

כי בדוגמה הזו לא מופיע שם משתנה ברכיב <AssignTo>, ומציין type כ'תגובה', המדיניות הזו משנה את אובייקט התגובה שמוחזר על ידי היעד השרת.

כותרת ה-HTTP שנוספה להודעת התגובה באמצעות המדיניות הזו נגזרת ממשתנה מאוכלס על ידי המדיניות LookupCache. לכן הודעת התשובה שונתה על ידי מדיניות הקצאת ההודעות מכילה כותרת HTTP שמציינת אם התוצאות שנשלפה מהמטמון או לא. הגדרת כותרות בתגובה יכולה להיות שימושית לניפוי באגים לפתרון בעיות.

4: הגדרת תוכן דינמי

תוכלו להשתמש ב'הקצאת הודעה' כדי להטמיע תוכן דינמי במטען הייעודי (payload) של התגובה. הודעות בקשה.

כדי להטמיע משתני זרימה של Edge במטען ייעודי (payload) של XML, צריך לארוז את המשתנה הייעודי בצורת מסולסל סוגריים מסולסלים, כמו: {prefix.name}.

בדוגמה הבאה מוטמע הערך של משתנה הזרימה של כותרת ה-HTTP user-agent ברכיב XML בשם User-agent:

<AssignMessage name="set-dynamic-content">
  <AssignTo createNew="false" type="response"></AssignTo>
  <Set>
    <Payload contentType="text/xml">
      <User-agent>{request.header.user-agent}</User-agent>
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

במטענים ייעודיים (payloads) של JSON, אפשר להוסיף משתנים באמצעות variablePrefix ו מאפייני variableSuffix עם תווים מפרידים כמו שמתואר בהמשך דוגמה:

<AssignMessage name="set-payload">
  <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
  {
     "user-agent": "@request.header.user-agent#"
  }
  </Payload>
</AssignMessage>

רשימה מלאה של משתני הזרימה זמינה בחומר העזר בנושא משתני זרימה.

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

5: הסרת פרמטר שאילתה

הדוגמה הבאה מסירה את פרמטר השאילתה apikey מהבקשה:

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

מומלץ להסיר מהבקשה את פרמטר השאילתה apikey כאשר משתמשים במדיניות VerifyAPIKey לצורך אימות משתמשים. עושים זאת כדי למנוע מידע רגיש חשוב מהעברה ליעד העורפי.

6: הגדרה/אחזור של משתנים

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

  1. יצירת שלושה משתני זרימה בבקשה, עם ערכים סטטיים
  2. קבלה של משתני הזרימה באופן דינמי במדיניות שנייה בתהליך הבקשה
  3. מגדיר אותן במטען הייעודי (payload) של התשובה.
<!-- Policy #1: Set variables in the request -->
<AssignMessage continueOnError="false" enabled="true" name="set-variables">
    <!-- Create a variable named myAppSecret -->
    <AssignVariable>
        <Name>myAppSecret</Name>
        <Value>42</Value>
    </AssignVariable>
    <!-- Create a variable named config.environment -->
    <AssignVariable>
        <Name>config.environment</Name>
        <Value>test</Value>
    </AssignVariable>
    <!-- Create a variable named config.protocol -->
    <AssignVariable>
        <Name>config.protocol</Name>
        <Value>gopher</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

במדיניות הראשונה, הרכיב <AssignVariable> יוצר ומגדיר שלושה מהמשתנים בבקשה. כל רכיב <Name> מציין שם של משתנה, והמשתנה <Value> מציין את הערך.

המדיניות השנייה משתמשת ברכיב <AssignVariable> כדי לקרוא את הערכים, ויוצרת שלושה משתנים חדשים:

<!-- Policy #2: Get variables from the request -->
<AssignMessage continueOnError="false" enabled="true" name="get-variables">
  <AssignTo createNew="false" transport="http" type="request"/>
  <!-- Get the value of myAppSecret and create a new variable, secret -->
  <AssignVariable>
    <Name>secret</Name>
    <Ref>myAppSecret</Ref>
    <Value>0</Value>
  </AssignVariable>
  <!-- Get the value of config.environment and create a new variable, environment -->
  <AssignVariable>
    <Name>environment</Name>
    <Ref>config.environment</Ref>
    <Value>default</Value>
  </AssignVariable>
  <!-- Get the value of config.protocol and create a new variable, protocol -->
  <AssignVariable>
    <Name>protocol</Name>
    <Ref>config.protocol</Ref>
    <Value>default</Value>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

במדיניות השנייה, הרכיב <Ref> מפנה למשתנה המקור, ו-<Name> מציינים את השמות של המשתנים החדשים. אם המשתנה אין הפניה לרכיב <Ref>, אפשר להשתמש בערך שצוין על ידי הרכיב <Value>.

כדי לנסות את קבוצת כללי המדיניות הזו:

  1. מוסיפים את מדיניות 1 ו-2 לתהליך הבקשה. חשוב להוסיף את מדיניות מספר 1 לפני המדיניות 2.
  2. מוסיפים את המדיניות השלישית בתהליך התגובה.
  3. המדיניות השלישית משתמשת ברכיב <Set> כדי להוסיף את המשתנים לתשובה. בדוגמה הבאה בונים מטען ייעודי (payload) של XML בתגובה ש-Edge מחזיר ללקוח:
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>
    

    חשוב לשים לב שהתחביר לגישה למשתני זרימה ב-<Set> צריך לכלול אותם בסוגריים מסולסלים.

    חשוב להגדיר את המאפיין contentType של הרכיב <Payload> כך: 'application/xml'.

  4. לשלוח בקשה לשרת ה-proxy ל-API. לדוגמה:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    לחלופין, ניתן להעביר את התוצאות דרך כלי שירות כמו xmllint, ה-XML מוצג במבנה תקין:

    curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -

    גוף התגובה אמור להיראות כך:

    <wrapper>
      <secret>42</secret>
      <config>
        <environment>test</environment>
        <protocol>gopher</protocol>
      </config>
    </wrapper>

7: קבלת כותרות תגובה של יתרונות מרכזיים לשירות

בדוגמה הבאה, נניח שמדיניות ServiceCallout נמצאת בבקשה לשרת ה-proxy ל-API: ותגובת היתרונות המרכזיים מכילה כמה כותרות עם אותו שם. (Set-Cookie). בהנחה שמשתנה התגובה של נכס היתרונות המרכזיים הוא ברירת המחדל calloutResponse, המדיניות הבאה מקבלת את Set-Cookie השני ערך הכותרת.

<AssignMessage continueOnError="false" enabled="true" name="get-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

{calloutResponse.header.Set-Cookie.values}

לכל רכיב צאצא בהפניה הזו יש דוגמאות נוספות. דוגמאות נוספות זמינות בכתובת דוגמה ל-AssignMessage ב-GitHub.

הפניה לרכיב צאצא

בקטע הזה מתוארים רכיבי הצאצא של <AssignMessage>.

<Add>

מוסיף מידע לבקשה או לתשובה, שמצוינים על ידי <AssignTo> לרכיב מסוים.

הרכיב <Add> מוסיף מאפיינים חדשים להודעה שלא קיימים במקור הודעה. כדי לשנות את הערכים של נכסים קיימים, משתמשים ברכיב <Set> לרכיב מסוים.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג סוג מורכב
רכיב הורה <AssignMessage>
רכיבים צאצאים <FormParams>
<Headers>
<QueryParams>

הרכיב <Add> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

דוגמה 1

בדוגמה הבאה נעשה שימוש ברכיב <FormParams> כדי לקבל את הערכים של שלושה פרמטרים של מחרוזת שאילתה מהבקשה הראשונית ולהגדיר אותם כפרמטרים של טופס בקשה לנקודת קצה (endpoint):

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

דוגמה 2

בדוגמה הבאה נשתמש ברכיב <Headers> כדי להוסיף את הרכיב הכותרת User-Agent לבקשת היעד של נקודת הקצה:

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

דוגמה 3

הדוגמה הבאה משתמשת ברכיב <QueryParams> כדי להוסיף שאילתה יחידה עם ערך סטטי לבקשה:

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

בדוגמה הזו נעשה שימוש ב-<Add> בתהליך המקדים של הבקשה. אם בוחנים את התוצאות בכלי כמו כלי המעקב, הבקשה ל-"http://httpbin.org/get" הופך ל- &quot;http://httpbin.org/get?myParam=42&quot;.

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

<FormParams> (צאצא של <Add>)

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

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מערך של רכיבי <FormParam>
רכיב הורה <Add>
רכיבים צאצאים <FormParam>

הרכיב <FormParams> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
  </Add>
</AssignMessage>

דוגמה 1

הדוגמה הבאה מוסיפה פרמטר טופס יחיד ("answer") וערך סטטי ('42') ל- הבקשה:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"></AssignTo>
</AssignMessage>

דוגמה 2

הדוגמה הבאה מקבלת את הערך של הפרמטר name של מחרוזת השאילתה ו מוסיף אותו לבקשה כפרמטר של טופס:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
</AssignMessage>

שימו לב שבדוגמה הזו לא צוין יעד עם <AssignTo>. המדיניות הזו מוסיפה את המדיניות לבקשה בלבד.

דוגמה 3

הדוגמה הבאה מוסיפה לבקשה כמה פרמטרים של טופס:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

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

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

%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en

אפשר להשתמש באפליקציה <FormParams> רק אם התנאים הבאים יתקיימו:

  • פועל של HTTP: POST
  • סוג ההודעה: בקשה
  • אחד (או שניהם) מהתנאים הבאים:
    • נתוני טופס: צריך להגדיר ערך מסוים, או ' (המחרוזת הריקה). לדוגמה, עם curl, צריך להוסיף את -d "" לבקשה.
    • הכותרת של Content-Length: מוגדרת ל-0 (אם לא קיימים נתונים בקשה מקורית; אחרת, האורך הנוכחי בבייטים). לדוגמה, עם curl הוסיף/ה את -H "Content-Length: 0" לבקשה שלך.

לדוגמה:

curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded"
  https://ahamilton-eval-test.apigee.net/am-test

כשמוסיפים את <FormParams>, Edge מגדיר את הכותרת Content-Type של הבקשה בתור &quot;application/x-www-form-urlencoded&quot; לפני שליחת ההודעה לשירות היעד.

<Headers> (צאצא של <Add>)

הוספת כותרות חדשות לבקשה או לתגובה שצוינו, שצוינו ב- <AssignTo>.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מערך של רכיבי <Header>
רכיב הורה <Add>
רכיבים צאצאים <Header>

הרכיב <Headers> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Add>
</AssignMessage>

דוגמה 1

הדוגמה הבאה מוסיפה את הכותרת user-agent להודעת הבקשה, ו- מקצה את הערך של משתנה הזרימה request.user.agent לכותרת הזו.

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (צאצא של <Add>)

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

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מערך של רכיבי <QueryParam>
רכיב הורה <Add>
רכיבים צאצאים <QueryParam>

הרכיב <QueryParams> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

דוגמה 1

הדוגמה הבאה מוסיפה את פרמטר השאילתה "myParam" לבקשה ומקצה את הערך '42' אליו:

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

אפשר להשתמש באפליקציה <QueryParams> רק אם התנאים הבאים יתקיימו:

  • פועל של HTTP: GET
  • סוג ההודעה: בקשה

בנוסף, אפשר להגדיר פרמטרים של שאילתה רק כאשר הרכיב <AssignTo> המאפיין type הוא הודעת בקשה. אי אפשר להגדיר אותם בתשובה.

אם אתם מגדירים מערך ריק של פרמטרים של שאילתות במדיניות (<Add><QueryParams/></Add>), המדיניות לא מוסיפה אף שאילתה . כמו להשמיט את <QueryParams>.

<AssignTo>

קובעת על איזה אובייקט המדיניות AssignMessage פועלת. האפשרויות הן:

  • הודעת הבקשה: request התקבל על ידי שרת ה-proxy של ה-API
  • הודעת תגובה: השדה response שהוחזר משרת היעד
  • הודעה מותאמת אישית: אובייקט של בקשה או תשובה בהתאמה אישית

שימו לב שבמקרים מסוימים לא תוכלו לשנות את האובייקט שעליו פועלת המדיניות AssignMessage. לדוגמה, לא ניתן להשתמש ב-<Add> או ב-<Set> כדי להוסיף או לשנות פרמטרים של שאילתה (<QueryParams>) או פרמטרים של טופס (<FormParams>) בתשובה. אפשר רק לשנות פרמטרים של שאילתה ופרמטרים של טופס בבקשה.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מחרוזת
רכיב הורה <AssignMessage>
רכיבים צאצאים ללא

אם לא מציינים את הערך <AssignTo>, המדיניות פועלת על הבקשה או התשובה המוגדרים כברירת מחדל, על סמך המיקום שבו המדיניות מופעלת. אם המדיניות מופעלת בתהליך הבקשה, היא משפיעה על הודעת הבקשה. אם הוא מופעל בתהליך התשובה, המדיניות משפיעה על התשובה כברירת מחדל.

הרכיב <AssignTo> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>

דוגמה 1

בדוגמה הבאה היעד הוא הבקשה המקורית שתישלח אל נקודת קצה ליעד:

<AssignMessage name="assignto-1">
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

על ידי הגדרת הערך של createNew ל-"false" (ברירת המחדל), הדוגמה הזו לא יוצרת בקשה חדשה. כל הפעולות במדיניות הזו משפיעות על הבקשה המקורית.

דוגמה 2

הדוגמה הבאה יוצרת אובייקט בקשה חדש:

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

כשיוצרים בקשה או אובייקט תשובה חדשים, הרכיבים האחרים של מדיניות AssignMessage (כמו <Add>, <Set> ו-<Set>) תפעל בהתאם של בקשת אובייקט.

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

דוגמה 3

הדוגמה הבאה יוצרת אובייקט בקשה חדש בשם "MyRequestObject":

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"&gt;MyRequestObject&lt;/AssignTo>
</AssignMessage>

כשיוצרים בקשה או אובייקט תשובה חדשים, הרכיבים האחרים של מדיניות AssignMessage (כמו <Add>, <Set> ו-<Set>) תפעל בהתאם של בקשת אובייקט.

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

בטבלה הבאה מתוארים המאפיינים של <AssignTo>:

מאפיין תיאור חובה? סוג
createNew

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

אם הערך הוא 'TRUE', המדיניות יוצרת משתנה חדש מהסוג שצוינו על ידי type ('בקשה' או 'תגובה'). אם לא מציינים את השם של המשתנה החדש, אז המדיניות יוצרת בקשה חדשה או על סמך הערך של type.

אם הערך הוא 'FALSE', המדיניות מגיבה באחת משתי הדרכים הבאות:

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

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

  • אם <AssignTo> הופך להודעה, העיבוד יתקדם להודעה הבאה בכל פעימה.
  • אם לא ניתן לפענח את <AssignTo> או שהנושא שלו משתנה לסוג שאינו הודעה, משתנה מסוג שצוין ב-type נוצר.
אופציונלי בוליאני
transport

מציינת את סוג התעבורה של הבקשה או הודעת התשובה.

ערך ברירת המחדל הוא 'http' (הערך היחיד הנתמך).

אופציונלי מחרוזת
type הסוג של ההודעה החדשה, כאשר הערך של createNew הוא 'true'. נתונים תקפים הערכים הם 'בקשה' או 'תגובה'.

ערך ברירת המחדל הוא 'בקשה'. אם משמיטים את המאפיין הזה, Edge יוצר אחד מהמאפיינים הבאים בקשה או תשובה, בהתאם למיקום בתהליך שהמדיניות הזו מופעלת.

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

<AssignVariable>

נותנת ערך למשתנה מסוג 'זרימת יעד' (למשל, משתנה שהערך שלו מוגדר על ידי מדיניות AssignMessage). אם משתנה הזרימה לא קיים, <AssignVariable> יוצר את זה.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג סוג מורכב
רכיב הורה <AssignMessage>
רכיבים צאצאים <Name> (חובה)
<Ref>
<Template>
<Value>

הערך שתקצה למשתנה של תהליך היעד יכול להיות אחת מהאפשרויות הבאות:

  • מחרוזת מילולית: משתמשים ברכיב הצאצא <Value> כדי לציין ליטרל. ערך המחרוזת של משתנה זרימת היעד.
  • משתנה זרימה: משתמשים ברכיב הצאצא <Ref> כדי לציין את הערך של משתנה זרימה קיים למשתנה זרימת היעד. לקבלת רשימת תהליכים מלאה משתנים שיכולים לשמש כמקור, ראו חומר עזר על משתני זרימה.
  • תבנית הודעה: משתמשים ברכיב הצאצא <Template> כדי לציין תבנית הודעות של משתנה של זרימת יעד.

הרכיב <AssignVariable> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

משתמשים ברכיב <Ref> כדי לציין את משתנה המקור. אם אין גישה למשתנה שהפנייה <Ref> מפנה אליו, Edge משתמש בערך שצוין על ידי הרכיב <Value>. אם תגדיר <Template>, הוא מקבל עדיפות על פני רכיבי הצאצא האחרים.

דוגמה 1

בדוגמה הבאה נקבע הערך של משתנה חדש, myvar, כליטרל. ערך "42":

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

דוגמה 2

הדוגמה הבאה מקצה את הערך של משתנה הזרימה request.header.user-agent למשתנה של תהליך היעד myvar והערך של פרמטר השאילתה country למשתנה זרימת היעד Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

אם אחת מההקצאות נכשלה, Edge יקצה את הערך 'ErrorOnCopy' במקום זאת. אל משתנה של זרימת יעד.

אם משתני הזרימה myvar או Country לא קיימים, <AssignVariable> יוצר אותן.

דוגמה 3

הדוגמה הבאה משתמשת בפונקציה <Template> רכיב צאצא כדי לשרשר שני משתני הקשר עם מחרוזת מילולית (מקף) ביניהן:

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

אחד השימושים הנפוצים ב-<AssignVariable> הוא הגדרת ערך ברירת מחדל לפרמטר של שאילתה, לכותרת ערך אחר שניתן להעביר עם הבקשה. אתם עושים זאת באמצעות שילוב של רכיבי צאצא של <Ref> ו-<Value>. לקבלת מידע נוסף למידע נוסף, ראו את הדוגמאות של <Ref>.

<Name> (צאצא של <AssignVariable>)

מציין את השם של משתנה זרימת היעד (למשל, המשתנה שהערך שלו מוגדר על ידי מדיניות AssignMessage). אם המשתנה בשם <AssignVariable> לא קיים, יוצרת דוח בשם הזה.

ערך ברירת מחדל לא רלוונטי
חובה? חובה
סוג מחרוזת
רכיב הורה <AssignVariable>
רכיבים צאצאים ללא

הרכיב <Name> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
  </AssignVariable>
</AssignMessage>

דוגמה 1

בדוגמה הבאה משתנה היעד כ-myvar ומגדיר אותו. לליטרל "42":

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

אם myvar לא קיים, <AssignVariable> יוצר אותו.

<Ref> (צאצא של <AssignVariable>)

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

הערך של <Ref> תמיד מפורש כמשתנה זרימה; אי אפשר לציין מחרוזת מילולית עם ערך מסוים. כדי להקצות ערך מחרוזת מילולי, צריך להשתמש ברכיב <Value> במקום זאת.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מחרוזת
רכיב הורה <AssignVariable>
רכיבים צאצאים ללא

כשמציינים משתנה זרימה עם <Ref>, צריך להשמיט את הפרמטר סגירת סוגריים מרובעים "{}" שבו בדרך כלל משתמשים כדי להפנות למשתנה זרימה. לדוגמה, כדי להגדיר את הערך של המשתנה החדש לערך של הזרימה client.host משתנה:

Do this (no brackets):
  <Ref>client.host</Ref>

Do NOT do this (brackets):
  <Ref>{client.host}</Ref>

כדי להגדיר ערך ברירת מחדל למשתנה של זרימת היעד, משתמשים בפונקציה <Value> בשילוב עם <Ref>. אם משתנה הזרימה שצוין על ידי <Ref> לא קיים, לא ניתן לקרוא אותו או שהוא null, ולכן Edge מקצה את הערך של <Value> למשתנה זרימת היעד.

הרכיב <Ref> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
  </AssignVariable>
</AssignMessage>

דוגמה 1

הדוגמה הבאה מקצה את הערך של משתנה הזרימה request.header.user-agent למשתנה myvar של זרימת היעד הערך של פרמטר השאילתה country למשתנה Country:

<AssignMessage name="assignvariable-4">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
  </AssignVariable>
</AssignMessage>

בדוגמה הזו, לא צוין ערך ברירת מחדל (או ערך חלופי) ל-Edge מטלות.

דוגמה 2

הדוגמה הבאה מקצה את הערך של משתנה הזרימה request.header.user-agent למשתנה 'נתיב יעד' myvar ולערך של פרמטר השאילתה country למשתנה Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

בדוגמה הזו, אם הערכים של משתנה הזרימה request.header.user-agent או שפרמטר השאילתה Country ריק, לא קריא או לא תקין, Edge מקצה הערך 'ErrorOnCopy' למשתנים החדשים.

דוגמה 3

תרחיש נפוץ לדוגמה של <AssignVariable> הוא הגדרת ערך ברירת המחדל של שאילתה פרמטר, כותרת או ערך אחר שניתן להעביר עם הבקשה. לדוגמה, ניתן ליצור שרת Proxy של weather API שבו הבקשה לוקחת פרמטר שאילתה יחיד שנקרא 'w'. הזה מכיל את מזהה העיר שבה רוצים לקבל את מזג האוויר. כתובת ה-URL של הבקשה כוללת הטופס:

http://myCO.com/v1/weather/forecastrss?w=city_ID

כדי להגדיר ערך ברירת מחדל ל-'w', יוצרים מדיניות AssignMessage כמו הבאים:

<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3">
  <AssignTo createNew="false" transport="http" type="request"/>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>request.queryparam.w</Name>
    <Ref>request.queryparam.w</Ref>
    <Value>12797282</Value>
  </AssignVariable>
</AssignMessage>

בדוגמה הזו, <AssignVariable> מקבל את הערך של request.queryparam.w ומקצים אותו לעצמו. אם משתנה הזרימה הוא null, כלומר 'w' פרמטר השאילתה היה שהושמט מהבקשה, דוגמה זו משתמשת בערך ברירת המחדל <Value>. לכן אפשר לשלוח בקשה ל-API הזה שרת proxy שמשמיט את ה-W פרמטר של שאילתה:

http://myCO.com/v1/weather/forecastrss

...ועדיין אפשר לגרום ל-Proxy ל-API להחזיר תוצאה חוקית.

בניגוד לשימוש ב-<Value>, הערך של <Ref> חייב להיות משתנה זרימה, כמו מאפיין של request, response, או אובייקט target. הערך יכול להיות גם משתנה זרימה מותאם אישית שיצרתם.

אם מציינים משתנה זרימה שלא קיים עם הערך של <Ref>, והערך של <IgnoreUnresolvedVariables> הוא 'true', Edge יקפיץ הודעת שגיאה.

<Template> (צאצא של <AssignVariable>)

מציין message template (תבנית של הודעות). הודעה תבנית מאפשרת להחליף את מחרוזת המשתנים כשהמדיניות מופעלת, וגם הוא יכול לשלב מחרוזות מילוליות עם שמות משתנים שעטפים בצורה מסולסלת פלטה לשיניים. בנוסף, תבניות של הודעות תמיכה כמו Esc והמרת אותיות רישיות (case-sensitive).

מאפיין ref משמש כדי לציין משתנה זרימה שבו הערך של המשתנה הוא תבנית של הודעה. לדוגמה, אפשר לשמור תבנית של הודעה מאפיין מותאם אישית באפליקציה למפתחים. כשאפליקציית Edge מזהה את אפליקציית הפיתוח אחרי שהיא מאמתת את מפתח ה-API או אסימון אבטחה (באמצעות מדיניות נוספת), <AssignVariable> יכול להשתמש בתבנית ההודעה מהמאפיין המותאם אישית של האפליקציה, שזמין בתור משתנה זרימה ממדיניות האבטחה. הדוגמה הבאה מתבססת על ההנחה שההודעה התכונה זמינה במאפיין לקוח בשם message_template אפליקציה למפתחים שמבצעת את הקריאה ל-API, שבה נעשה שימוש במדיניות VerifyAPIKey כדי לאמת מפתח ה-API של האפליקציה:

<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מחרוזת
רכיב הורה <AssignVariable>
רכיבים צאצאים ללא

הרכיב <Template> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
  </AssignVariable>
</AssignMessage>

דוגמה 1

הדוגמה הבאה משתמשת בתחביר של תבניות הודעה כדי לשרשר שני משתני הקשר עם מחרוזת מילולית (מקף) ביניהן:

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

דוגמה 2

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

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_template_variable'/>

  </AssignVariable>
</AssignMessage>

דוגמה 3

הדוגמה הבאה מציינת משתנה זרימה וערך טקסט. במקרה הזה, אם המשתנה שאליו מתבצעת ההפניה אינו null, הערך הזה משמש כתבנית. אם ההפניה הערך הוא null, ואז ערך הטקסט (במקרה הזה, {system.uuid}-{messageid}) משמש כתבנית. הדפוס הזה שימושי כדי לציין "ביטול" בערך, כאשר במקרים מסוימים תרצו לשנות את הערכים של תבנית ברירת המחדל (חלק הטקסט) שמוגדרות באופן דינמי. לדוגמה, הצהרה מותנית עשויה להחזיר ערך ממפה של מפתח-ערך, ומגדירים את המשתנה המפנה לערך הזה:

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_variable'>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

<Value> (צאצא של <AssignVariable>)

מגדיר את הערך של משתנה זרימת היעד שהוגדר באמצעות <AssignVariable>. הערך מתפרש תמיד כמחרוזת מילולית. לא ניתן להשתמש במשתנה זרימה בתור הערך, אפילו אם מציבים את הערך בסוגריים מרובעים ('{}'). כדי להשתמש במשתנה זרימה, צריך להשתמש בפונקציה <Ref> במקום זאת.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מחרוזת
רכיב הורה <AssignVariable>
רכיבים צאצאים ללא

בשימוש בשילוב עם הרכיב <Ref>, <Value> משמש כערך ברירת המחדל (או ערך חלופי). אם לא צוין <Ref>, אז הוא לא ניתן לפתור, או שהוא null, נעשה שימוש בערך של <Value>.

הרכיב <Value> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

דוגמה 1

הדוגמה הבאה מגדירה את הערך של משתנה זרימת היעד, myvar, לליטרל "42":

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

דוגמה 2

הדוגמה הבאה מקצה את הערך של משתנה הזרימה request.header.user-agent למשתנה הזרימה myvar ולערך של פרמטר השאילתה country למשתנה Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

אם אחת מההקצאות תיכשל, המערכת של <AssignVariable> תקצה במקום זאת את הערך 'ErrorOnCopy'. אל משתנה של זרימת יעד.

<Copy>

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

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מחרוזת
רכיב הורה <AssignMessage>
רכיבים צאצאים <FormParams>
<Headers>
<Path>
<Payload>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

הרכיב <Copy> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
    <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>
  <!-- Used as the destination for the <Copy> values -->
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
  

דוגמה 1

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

<AssignMessage continueOnError="false" enabled="true" name="copy-1">
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1">Header value 1</Header>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_2">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_3">Form param value 1</FormParam>
    </FormParams>
    <Payload>false</Payload>
    <Path>true</Path>
    <QueryParams/>
    <ReasonPhrase>false</ReasonPhrase>
    <StatusCode>false</StatusCode>
    <Verb>false</Verb>
    <Version>false</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

הרכיב <Copy> כולל את המאפיינים הבאים:

מאפיין תיאור חובה? סוג
source

מציין את אובייקט המקור של העותק.

  • אם לא מציינים את source, היא נחשבת להודעה פשוטה. עבור לדוגמה, אם המדיניות נמצאת בתהליך הבקשה, ברירת המחדל של המקור תהיה אובייקט request. אם המדיניות נמצאת בתהליך התשובה, ברירת המחדל היא אובייקט response. אם משמיטים את הערך של source, אפשר להשתמש בערך מוחלט להפנות למשתנה זרימה כמקור לעותק. לדוגמה, מציינים את הערך בתור {request.header.user-agent}.
  • אם לא ניתן לפענח את משתנה המקור או שהוא הופך לסוג שאינו הודעה, לא ניתן לקבל תשובה מ-<Copy>.
אופציונלי מחרוזת

<FormParams> (צאצא של <Copy>)

העתקת הפרמטרים של הטופס מהבקשה שצוינה על ידי המאפיין source של הרכיב <Copy> אל הבקשה שצוין על ידי הרכיב <AssignTo>. לרכיב הזה אין השפעה תשובה.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מערך של רכיבי <FormParam> או מערך ריק
רכיב הורה <Copy>
רכיבים צאצאים <FormParam>

הרכיב <FormParams> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Copy>
</AssignMessage>

דוגמה 1

בדוגמה הבאה מתבצעת העתקה של פרמטר טופס יחיד מהבקשה אל בקשה מותאמת אישית "MyCustomRequest":

<AssignMessage name="copy-formparams-1">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName">Form param value 1</FormParam>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

דוגמה 2

בדוגמה הבאה מועתקים כל הפרמטרים של הטופס לבקשה המותאמת אישית &quot;MyCustomRequest&quot;:

<AssignMessage name="copy-formparams-2">
  <Copy source="request">
    <FormParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

דוגמה 3

בדוגמה הבאה מועתקים שלושה פרמטרים של טופס לבקשה המותאמת אישית &quot;MyCustomRequest&quot;:

<AssignMessage name="copy-formparams-3">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName1"/>
      <FormParam name="paramName2"/>
      <FormParam name="paramName3"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

דוגמה 4

אם יש כמה פרמטרים של טפסים בעלי שם זהה, משתמשים בתחביר הבא:

<AssignMessage name="copy-formparams-4">
  <Copy source="request">
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

בדוגמה הזו מועתקים f1, f2 והערך השני של f3. אם 'f3' יש רק אחד ולאחר מכן הוא לא יועתק.

אפשר להשתמש באפליקציה <FormParams> רק אם התנאים הבאים יתקיימו:

  • פועל של HTTP: POST
  • סוג ההודעה: תשובה
  • אחד (או שניהם) מהתנאים הבאים:
    • נתוני טופס: צריך להגדיר ערך מסוים, או ' (המחרוזת הריקה). לדוגמה, עם curl, צריך להוסיף את -d "" לבקשה.
    • הכותרת Content-Length: מגדירים את הערך 0 (אם אין נתונים בשדה בקשה מקורית; אחרת, האורך הנוכחי. לדוגמה, עם curl הוסיף/ה את -H "Content-Length: 0" לבקשה שלך.

כשמעתיקים את <FormParams>, <Copy> מגדיר את Content-Type של ההודעה בתור &quot;application/x-www-form-urlencoded&quot; לפני שליחת ההודעה לשירות היעד.

<Headers> (צאצא של <Copy>)

העתקת כותרות HTTP מהבקשה או מהודעת התשובה שצוינו על ידי המאפיין source של הרכיב <Copy> אל הבקשה או הודעת תשובה שצוינו על ידי הרכיב <AssignTo>.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מערך של רכיבי <Header> או מערך ריק
רכיב הורה <Copy>
רכיבים צאצאים <Header>

הרכיב <Headers> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Copy>
</AssignMessage>

דוגמה 1

בדוגמה הבאה מתבצעת העתקה של הכותרת user-agent מהבקשה אל אובייקט בקשה חדש בהתאמה אישית:

<AssignMessage name="copy-headers-1">
  <Copy source="request">
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

דוגמה 2

כדי להעתיק את כל הכותרות, צריך להשתמש ברכיב <Headers> ריק, כמו בדוגמה הבאה מציג:

<AssignMessage name="copy-headers-2">
  <Copy source="request">
    <Headers/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

דוגמה 3

אם יש כמה כותרות עם אותו שם, צריך להשתמש בתחביר הבא:

<AssignMessage name="copy-headers-3">
  <Copy source="request">
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

בדוגמה הזו מתבצעת העתקה של h1, h2 והערך השני של h3. אם 'h3' יש רק אחד ולאחר מכן הוא לא יועתק.

<Path> (צאצא של <Copy>)

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

אם הערך הוא 'true', המדיניות הזו מעתיקה את הנתיב מהודעת הבקשה שצוינה על ידי המאפיין source של הרכיב <Copy> אל הבקשה הודעה שצוינה ברכיב <AssignTo>.

ערך ברירת מחדל לא נכון
חובה? אופציונלי
סוג בוליאני
רכיב הורה <Copy>
רכיבים צאצאים ללא

הרכיב <Path> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Path>[false|true]</Path>
  </Copy>
</AssignMessage>

דוגמה 1

הדוגמה הבאה מציינת שמדיניות AssignMessage צריכה להעתיק את הנתיב מהמקור בקשה לאובייקט הבקשה החדש המותאם אישית:

<AssignMessage name="copy-path-1">
  <Copy source="request">
    <Path>true</Path>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

אפשר להשתמש באפליקציה <Path> רק אם התנאים הבאים יתקיימו:

  • סוג ההודעה: בקשה

<Payload> (צאצא של <Copy>)

המדיניות קובעת אם צריך להעתיק את המטען הייעודי (Payload) מהמקור ליעד. המקור והיעד יכולים להיות בקשות או תגובות.

אם הערך הוא 'TRUE', המדיניות הזו מעתיקה את המטען הייעודי (Payload) מההודעה שצוינה ב- מאפיין source של הרכיב <Copy> ל ההודעה שצוין על ידי הרכיב <AssignTo>.

ערך ברירת מחדל לא נכון
חובה? אופציונלי
סוג בוליאני
רכיב הורה <Copy>
רכיבים צאצאים ללא

הרכיב <Payload> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

דוגמה 1

בדוגמה הבאה הערך של <Payload> מוגדר כ-'true'. כך שהמטען הייעודי (Payload) של הבקשה מועתק מהבקשה לתגובה:

<AssignMessage name="copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

<QueryParams> (צאצא של <Copy>)

העתקת הפרמטרים של מחרוזת השאילתה מהבקשה שצוינה על ידי המאפיין source של הרכיב <Copy> אל הבקשה שצוינה לפי הרכיב <AssignTo>. לרכיב הזה אין השפעה על התשובה.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מערך של רכיבי <QueryParam> או מערך ריק
רכיב הורה <QueryParam>
רכיבים צאצאים ללא

הרכיב <QueryParams> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Copy>
</AssignMessage>

דוגמה 1

בדוגמה הבאה מעתיקה את 'my_param' של שאילתה מהבקשה לקובץ חדש, אובייקט בקשה בהתאמה אישית:

<AssignMessage name="copy-queryparams-1">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="my_param"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

דוגמה 2

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

<AssignMessage name="copy-queryparams-2">
  <Copy source="request">
    <QueryParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

דוגמה 3

אם יש כמה פרמטרים של שאילתות שיש להם את אותו שם, צריך להשתמש בתחביר הבא:

<AssignMessage name="copy-queryparams-3">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="qp1"/>
      <QueryParam name="qp2"/>
      <QueryParam name="qp3.2"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

בדוגמה הזו מועתקים qp1, qp2 והערך השני של qp3. אם 'qp3' כולל רק ערך אחד, הוא לא יועתק.

אפשר להשתמש באפליקציה <QueryParams> רק אם התנאים הבאים יתקיימו:

  • פועל של HTTP: GET
  • סוג ההודעה: בקשה

<ReasonPhrase> (צאצא של <Copy>)

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

אם הערך הוא 'TRUE', המדיניות הזו מעתיקה את הערך ReasonPhrase מהתשובה. צוין על ידי המאפיין source של הרכיב <Copy> ב התגובה שצוין באמצעות הרכיב <AssignTo>.

ערך ברירת מחדל לא נכון
חובה? אופציונלי
סוג בוליאני
רכיב הורה <Copy>
רכיבים צאצאים ללא

הרכיב <ReasonPhrase> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <ReasonPhrase>[false|true]</ReasonPhrase>
  </Copy>
</AssignMessage>

דוגמה 1

בדוגמה הבאה הערך של <ReasonPhrase> הוא 'true', וכתוצאה מכך <Copy> כדי להעתיק את ביטוי הסיבה מתגובת ברירת המחדל לאובייקט של תשובה מותאמת אישית:

<AssignMessage name="copy-reasonphrase-1">
  <Copy source="response">
    <ReasonPhrase>true</ReasonPhrase>
  </Copy>
  <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

אפשר להשתמש באפליקציה <ReasonPhrase> רק אם התנאים הבאים יתקיימו:

  • סוג ההודעה: תשובה

<StatusCode> (צאצא של <Copy>)

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

אם הערך הוא 'TRUE', המדיניות הזו מעתיקה את קוד הסטטוס מההודעת התשובה שצוינה על ידי המאפיין source של הרכיב <Copy> לתגובה הודעה שצוינה ברכיב <AssignTo>.

ערך ברירת מחדל לא נכון
חובה? אופציונלי
סוג בוליאני
רכיב הורה <Copy>
רכיבים צאצאים ללא

הרכיב <StatusCode> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <StatusCode>[false|true]</StatusCode>
  </Copy>
</AssignMessage>

דוגמה 1

בדוגמה הבאה הערך של <StatusCode> הוא True, קוד הסטטוס מועתק. מאובייקט התשובה שמוגדר כברירת מחדל לאובייקט תשובה חדש בהתאמה אישית:

<AssignMessage name="copy-statuscode-1">
  <Copy source="response">
    <StatusCode>true</StatusCode>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

אפשר להשתמש באפליקציה <StatusCode> רק אם התנאים הבאים יתקיימו:

  • סוג ההודעה: תשובה

שימוש נפוץ ב-<StatusCode> הוא לוודא שתגובת שרת ה-proxy היא באותו סטטוס כתגובה שהתקבלה מהיעד כאשר createNew של <AssignTo> מוגדר כ-"true".

<Verb> (צאצא של <Copy>)

המדיניות קובעת אם פועל ה-HTTP יועתק מבקשת המקור ליעד בקשה. לרכיב הזה אין השפעה על התשובה.

אם הפרמטר מקבל את הערך 'TRUE', המערכת מעתיקה את פועל שנמצא במאפיין source של הרכיב <Copy>. לבקשה שצוינה ברכיב <AssignTo>.

ערך ברירת מחדל לא נכון
חובה? אופציונלי
סוג בוליאני
רכיב הורה <Copy>
רכיבים צאצאים ללא

הרכיב <Verb> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Verb>[false|true]</Verb>
  </Copy>
</AssignMessage>

דוגמה 1

בדוגמה הבאה הערך של <Verb> הוא 'true', והפעולה הזו מעתיקה את פועל ברירת מחדל לבקשה חדשה מותאמת אישית:

<AssignMessage name="copy-verb-1">
  <Copy source="request">
    <Verb>true</Verb>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

אפשר להשתמש באפליקציה <Verb> רק אם התנאים הבאים יתקיימו:

  • סוג ההודעה: בקשה

<Version> (צאצא של <Copy>)

המדיניות קובעת אם גרסת ה-HTTP תועתק מבקשת המקור לבקשת היעד. לרכיב הזה אין השפעה על התשובה.

אם הערך הוא True, גרסת ה-HTTP שנמצאה במאפיין source של הרכיב <Copy> מועתקת לאובייקט שצוין על ידי הרכיב <AssignTo>.

ערך ברירת מחדל לא נכון
חובה? אופציונלי
סוג בוליאני
רכיב הורה <Copy>
רכיבים צאצאים ללא

הרכיב <Version> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Version>[false|true]</Version>
  </Copy>
</AssignMessage>

דוגמה 1

בדוגמה הבאה הערך של <Version> מוגדר כ-'true'. בבקשה, שמעתיקה את גרסה מאובייקט הבקשה שמוגדר כברירת מחדל לאובייקט בקשה חדש בהתאמה אישית:

<AssignMessage name="copy-version-1">
  <Copy source="request">
    <Version>true</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

אפשר להשתמש באפליקציה <Version> רק אם התנאים הבאים יתקיימו:

  • סוג ההודעה: בקשה

<DisplayName>

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

הרכיב <DisplayName> משותף לכל כללי המדיניות.

ערך ברירת מחדל לא רלוונטי
חובה? זה שינוי אופציונלי. אם משמיטים את הערך של <DisplayName>, נעשה שימוש במאפיין name של המדיניות
סוג מחרוזת
רכיב הורה &lt;PolicyElement&gt;
רכיבים צאצאים ללא

הרכיב <DisplayName> משתמש בתחביר הבא:

תחביר

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

דוגמה

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

לרכיב <DisplayName> אין מאפיינים או רכיבי צאצא.

<IgnoreUnresolvedVariables>

המדיניות הזו קובעת אם העיבוד ייפסק כשנתקלים במשתנה שלא זוהה.

ערך ברירת מחדל לא נכון
חובה? אופציונלי
סוג בוליאני
רכיב הורה <AssignMessage>
רכיבים צאצאים ללא

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

הגדרה של <IgnoreUnresolvedVariables> לערך true שונה מהגדרה של ה-continueOnError של <AssignMessage> אל true כי הוא ספציפי והגדרה של ערכים של משתנים. אם מגדירים את continueOnError לערך true, לאחר מכן Edge מתעלם מכל השגיאות, ולא רק משגיאות שאירעו במהלך השימוש משתנים.

הרכיב <IgnoreUnresolvedVariables> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</AssignMessage>

דוגמה 1

הדוגמה הבאה מגדירה את <IgnoreUnresolvedVariables> כ-"true":

<AssignMessage name="ignoreunresolvedvariables">
  <Copy source="response">
    ...
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  </Copy>
</AssignMessage>

<Remove>

מסירה כותרות, פרמטרים של שאילתות, פרמטרים של טפסים ו/או את המטען הייעודי (payload) של ההודעה מ- הודעה. ההודעה יכולה להיות בקשה או תשובה. אתם מציינים את ההודעה <Remove> פועל באמצעות האלמנט <AssignTo>.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג סוג מורכב
רכיב הורה <AssignMessage>
רכיבים צאצאים <FormParams>
<Headers>
<Payload>
<QueryParams>

תרחיש לדוגמה נפוץ ב-<Remove> הוא מחיקת פרמטר של שאילתה שמכיל מידע רגיש מאובייקט הבקשה הנכנס, כדי למנוע העברה שלו לשרת העורפי.

הרכיב <Remove> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

דוגמה 1

הדוגמה הבאה מסירה את גוף ההודעה מהתשובה:

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

בתהליך התשובה, המדיניות הזו מסירה את גוף התשובה ומחזירה רק HTTP אל הלקוח.

דוגמה 2

בדוגמה הבאה מסירים את כל הפרמטרים של הטופס ופרמטר של שאילתה מקובץ בקשה:

<AssignMessage continueOnError="false" enabled="true" name="remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<FormParams> (צאצא של <Remove>)

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

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מערך של רכיבי <FormParam> או מערך ריק
רכיב הורה <Remove>
רכיבים צאצאים <FormParam>

הרכיב <FormParams> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Remove>
</AssignMessage>

דוגמה 1

בדוגמה הבאה מסירים מהבקשה שלושה פרמטרים של טופס:

<AssignMessage name="remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

דוגמה 2

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

<AssignMessage name="remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

דוגמה 3

אם יש כמה פרמטרים של טפסים בעלי שם זהה, משתמשים בתחביר הבא:

<AssignMessage name="remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

בדוגמה הזו מסירים את 'f1', 'f2' ואת הערך השני של 'f3'. אם 'f3' יש רק אחד ערך מסוים, הוא לא יוסר.

אפשר להשתמש באפליקציה <FormParams> רק אם התנאים הבאים יתקיימו:

  • סוג ההודעה: בקשה
  • Content-Type: "application/x-www-form-urlencoded"

<Headers> (צאצא של <Remove>)

מסיר את כותרות ה-HTTP שצוינו מהבקשה או מהתגובה, המצוינות על ידי <AssignTo>.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מערך של רכיבי <Header> או מערך ריק
רכיב הורה <Remove>
רכיבים צאצאים <Header>

הרכיב <Headers> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

דוגמה 1

בדוגמה הבאה מסירים את הכותרת user-agent מהבקשה:

<AssignMessage name="remove-headers-1">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

דוגמה 2

הדוגמה הבאה מסירה את כל הכותרות מהבקשה:

<AssignMessage name="remove-headers-2">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

דוגמה 3

אם יש כמה כותרות עם אותו שם, צריך להשתמש בתחביר הבא:

<AssignMessage name="remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

בדוגמה הזו מסירים את 'h1', 'h2' ואת הערך השני של 'h3' מהבקשה. אם 'h3' יש רק ערך אחד, והוא לא יוסר.

<Payload> (צאצא של <Remove>)

המדיניות קובעת אם המטען הייעודי (Payload) בבקשה או בתגובה יימחק על ידי <Remove>, שצוין על ידי הרכיב <AssignTo>. הגדרה כ-'true' אל ניקוי המטען הייעודי (Payload), אחרת הוא 'FALSE'. ערך ברירת המחדל הוא 'FALSE'.

ערך ברירת מחדל לא נכון
חובה? אופציונלי
סוג בוליאני
רכיב הורה <Remove>
רכיבים צאצאים ללא

הרכיב <Payload> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <Payload>[false|true]</Payload>
  </Remove>
</AssignMessage>

דוגמה 1

בדוגמה הבאה הערך של <Payload> מוגדר כ-'true'. כך שהמטען הייעודי (Payload) של הבקשה הוסר:

<AssignMessage name="remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (צאצא של <Remove>)

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

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מערך של רכיבי <QueryParam> או מערך ריק
רכיב הורה <Remove>
רכיבים צאצאים <QueryParam>

הרכיב <QueryParams> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

דוגמה 1

הדוגמה הבאה מסירה מהבקשה פרמטר שאילתה יחיד:

<AssignMessage name="remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

דוגמה 2

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

<AssignMessage name="remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

דוגמה 3

אם יש כמה פרמטרים של שאילתות שיש להם את אותו שם, צריך להשתמש בתחביר הבא:

<AssignMessage name="remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

בדוגמה הזו מסירים את 'qp1', 'qp2' ואת הערך השני של 'qp3' מהבקשה. אם המיקום 'qp3' יש רק ערך אחד, והוא לא יוסר.

דוגמה 4

הדוגמה הבאה מסירה את פרמטר השאילתה apikey מהבקשה:

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

אפשר להשתמש באפליקציה <QueryParams> רק אם התנאים הבאים יתקיימו:

  • פועל של HTTP: GET
  • סוג ההודעה: בקשה

<Set>

מגדיר מידע בהודעה של הבקשה או התגובה, שמצוינת על ידי <AssignTo>. <Set> מחליף כותרות או פרמטרים שכבר קיימים בהודעה המקורית. כדי ליצור כותרת חדשה או פרמטר חדש, משתמשים בקוד: את הרכיב <Add>.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג סוג מורכב
רכיב הורה <AssignMessage>
רכיבים צאצאים <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

הרכיב <Set> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

דוגמה 1

בדוגמה הבאה מוצג הרכיב <Set>:

<AssignMessage continueOnError="false" enabled="true" name="set-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
    <QueryParams>
      <QueryParam name="name">{request.header.name}</QueryParam>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
    <!-- <Verb>GET</Verb> -->
    <Payload contentType="text/plain">42</Payload>
    <Path/>
    <ReasonPhrase>Bad request</ReasonPhrase>
    <StatusCode>400</StatusCode>
    <Verb>POST</Verb>
    <Verb>{my_variable}</Verb>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

<FormParams> (צאצא של <Set>)

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

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מערך של רכיבי <FormParam>
רכיב הורה <Set>
רכיבים צאצאים <FormParam>

הרכיב <FormParams> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Set>
</AssignMessage>

דוגמה 1

בדוגמה הבאה מוגדר פרמטר טופס בשם 'myparam' לערך של משתנה request.header.myparam בבקשה חדשה ומותאמת אישית:

<AssignMessage name="set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
    <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

אפשר להשתמש באפליקציה <FormParams> רק אם התנאים הבאים יתקיימו:

  • פועל של HTTP: POST
  • סוג ההודעה: בקשה

אם מגדירים במדיניות פרמטרים ריקים של טפסים (<Add><FormParams/></Add>), המדיניות לא מוסיפה שום צורה . הדבר זהה להשמטה של <FormParams>.

הפרמטר Content-Type של ההודעה השתנה על ידי <Set> ל- &quot;application/x-www-form-urlencoded&quot; לפני ששולחים אותו לנקודת הקצה (endpoint) של היעד.

<Headers> (צאצא של <Set>)

מחליפה כותרות HTTP קיימות בבקשה או בתגובה, שמצוינות על ידי <AssignTo>.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מערך של רכיבי <Header>
רכיב הורה <Set>
רכיבים צאצאים <Header>

הרכיב <Headers> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Set>
</AssignMessage>

דוגמה 1

הדוגמה הבאה מגדירה את הכותרת user-agent לערך של משתנה request.header.user-agent:

<AssignMessage name="set-headers-1">
  <Set>
    <Headers>
      <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

אם מגדירים כותרות ריקות במדיניות (<Add><Headers/></Add>), המדיניות לא מוסיפה כותרות. הזה זהה להשמטה של <Headers>.

<Path> (צאצא של <Set>)

<Payload> (צאצא של <Set>)

מגדיר את גוף ההודעה של בקשה או תגובה, כפי שמצוין על ידי <AssignTo>. המטען הייעודי (Payload) יכול להיות כל סוג תוכן תקין, כמו פשוט. טקסט, JSON או XML.

ערך ברירת מחדל מחרוזת ריקה
חובה? אופציונלי
סוג מחרוזת
רכיב הורה <Set>
רכיבים צאצאים ללא

הרכיב <Payload> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
  </Set>
</AssignMessage>

דוגמה 1

הדוגמה הבאה מגדירה מטען ייעודי (payload) של טקסט פשוט:

<AssignMessage name="set-payload-1">
  <Set>
    <Payload contentType="text/plain">42</Payload>
  </Set>
</AssignMessage>

דוגמה 2

הדוגמה הבאה מגדירה מטען ייעודי (payload) של JSON:

<AssignMessage name="set-payload-2">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"bar"}
    </Payload>
  </Set>
</AssignMessage>

דוגמה 3

בדוגמה הבאה מתווספים ערכי משתנים למטען הייעודי (Payload) על ידי גלישת שמות של משתנים. בסוגריים מסולסלים:

<AssignMessage name="set-payload-3">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"{variable_name}"}
    </Payload>
  </Set>
</AssignMessage>

בגרסאות ישנות יותר של Apigee Edge — לדוגמה, לפני השקת הגרסה 16.08.17 לענן — אפשר לא להשתמש בסוגריים מסולסלים כדי לציין הפניות למשתנים בתוך מטענים ייעודיים (payloads) של JSON. בגרסאות האלה, צריך להשתמש במאפיינים variablePrefix ו-variableSuffix כדי לציין תווי הפרדה, ולהשתמש בהם כדי לכלול שמות של משתנים, כמו:

<AssignMessage name="set-payload-3b">
  <Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
      {"name":"foo", "type":"@variable_name#"}
    </Payload>
  </Set>
</AssignMessage>

התחביר הישן הזה עדיין פועל.

דוגמה 4

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

הדוגמה הבאה משתמשת בתחביר של סוגריים מסולסלים כדי להגדיר חלק מהמטען הייעודי (Payload) לערך של ערך המשתנה:

<AssignMessage name="set-payload-4">
  <Set>
    <Payload contentType="text/xml">
      <root>
        <e1>sunday</e1>
        <e2>funday</e2>
        <e3>{var1}</e3>
      </root>
    </Payload>
  </Set>
</AssignMessage>

בטבלה הבאה מתוארים המאפיינים של <Payload>:

מאפיין תיאור נוכחות סוג
contentType

אם צוין, הערך של contentType מוקצה כותרת HTTP Content-Type.

אופציונלי מחרוזת
variablePrefix אפשרות זו מציינת את התו המפריד הראשון במשתנה זרימה. ברירת המחדל היא '{'. עבור מידע נוסף זמין בחומר עזר בנושא משתני זרימה. אופציונלי צ'אר
variableSuffix אפשרות זו מציינת את התו המפריד האחרון במשתנה זרימה. ברירת המחדל היא '}'. עבור מידע נוסף זמין בחומר עזר בנושא משתני זרימה. אופציונלי צ'אר

<QueryParams> (צאצא של <Set>)

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

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מערך של רכיבי <QueryParam>
רכיב הורה <Set>
רכיבים צאצאים <QueryParam>

הרכיב <QueryParams> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Set>
</AssignMessage>

דוגמה 1

בדוגמה הבאה המערכת מגדירה את הערך בשדה 'כתובת' של השאילתה לערך משתנה אחד (request.header.address):

<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</AssignMessage>

אפשר להשתמש באפליקציה <QueryParams> רק אם התנאים הבאים יתקיימו:

  • פועל של HTTP: GET
  • סוג ההודעה: בקשה

אם אתם מגדירים פרמטרים ריקים של שאילתות במדיניות (<Set><QueryParams/></Set>), המדיניות לא מגדירה אף שאילתה . כמו להשמיט את <QueryParams>.

<ReasonPhrase> (צאצא של <Set>)

מגדיר את ביטוי הסיבה בתשובה. בדרך כלל הדבר נעשה לניפוי באגים בשילוב עם <StatusCode> לרכיב הזה אין השפעה על בקשה.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מחרוזת
רכיב הורה <Set>
רכיבים צאצאים ללא

הרכיב <ReasonPhrase> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
  </Set>
</AssignMessage>

דוגמה 1

הדוגמה הבאה מגדירה ביטוי פשוט של סיבה:

<AssignMessage name="set-reasonphrase-1">
  <Set>
    <ReasonPhrase>Bad medicine</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

דוגמה 2

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

<AssignMessage name="set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

אפשר להשתמש באפליקציה <ReasonPhrase> רק אם התנאים הבאים יתקיימו:

  • סוג ההודעה: תשובה

<StatusCode> (צאצא של <Set>)

הגדרת קוד הסטטוס בתגובה. לרכיב הזה אין השפעה על בקשה.

ערך ברירת מחדל '200' (כאשר המאפיין createNew של <AssignTo> מוגדר כ-'true')
חובה? אופציונלי
סוג מחרוזת או variable
רכיב הורה <Set>
רכיבים צאצאים ללא

הרכיב <StatusCode> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
  </Set>
</AssignMessage>

דוגמה 1

בדוגמה הבאה מוגדר קוד סטטוס פשוט:

<AssignMessage name="set-statuscode-1">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

דוגמה 2

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

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

אפשר להשתמש באפליקציה <StatusCode> רק אם התנאים הבאים יתקיימו:

  • סוג ההודעה: תשובה

<Verb> (צאצא של <Set>)

מגדיר את פועל ה-HTTP בבקשה. לרכיב הזה אין השפעה על התשובה.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מחרוזת או variable
רכיב הורה <Set>
רכיבים צאצאים ללא

הרכיב <Verb> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
  </Set>
</AssignMessage>

דוגמה 1

בדוגמה הבאה מוגדר פועל פשוט לבקשה:

<AssignMessage name="set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

דוגמה 2

התוכן של <Verb> נחשב כתבנית של הודעה. כלומר שם המשתנה בתוך סוגריים מסולסלים, המערכת תוחלף בזמן הריצה בערך של ההפניה מותאם אישית.

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

<AssignMessage name="set-verb-2">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

אפשר להשתמש באפליקציה <Verb> רק אם התנאים הבאים יתקיימו:

  • סוג ההודעה: בקשה

<Version> (צאצא של <Set>)

מגדיר את גרסת ה-HTTP בבקשה. לרכיב הזה אין השפעה על התשובה.

ערך ברירת מחדל לא רלוונטי
חובה? אופציונלי
סוג מחרוזת או variable
רכיב הורה <Set>
רכיבים צאצאים ללא

הרכיב <Version> משתמש בתחביר הבא:

תחביר

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

דוגמה 1

הדוגמה הבאה מגדירה את מספר הגרסה כ-"1.1":

<AssignMessage name="set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

דוגמה 2

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

<AssignMessage name="set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

התוכן של <Version> נחשב כתבנית של הודעה. כלומר שם משתנה שמוקף בסוגריים מסולסלים יוחלף בזמן הריצה בערך של ההפניה מותאם אישית.

אפשר להשתמש באפליקציה <Version> רק אם התנאים הבאים יתקיימו:

  • סוג ההודעה: בקשה

יצירת הודעות עם בקשות בהתאמה אישית

אפשר להשתמש במדיניות AssignMessage כדי ליצור הודעת בקשה מותאמת אישית. אחרי שיוצרים התאמה אישית בקשה להשתמש בה בדרכים הבאות:

  • גישה למשתנים שלו בכללי מדיניות אחרים
  • העברה לשירות חיצוני

כדי ליצור הודעת בקשה מותאמת אישית, משתמשים ברכיב <AssignTo> במדיניות AssignMessage המדיניות בנושא שינוי הערך של createNew ל-true ומציינים את שם ההודעה החדשה בגוף ההודעה של הרכיב, כפי שאפשר לראות בדוגמה הבאה:

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

כברירת מחדל, Edge לא עושה דבר עם הודעת הבקשה המותאמת אישית. אחרי היצירה, Edge להמשיך את התהליך עם הבקשה המקורית. כדי להשתמש בבקשה המותאמת אישית, צריך להוסיף מדיניות כמו בתור מדיניות ServiceCallout לשרת ה-proxy, שיכול להעביר את הבקשה המותאמת אישית למשתמש חיצוני לאחר השיפור.

הדוגמאות הבאות יוצרות הודעות עם בקשה בהתאמה אישית:

דוגמה 1

הדוגמה הבאה יוצרת אובייקט בקשה בהתאמה אישית באמצעות Assign Message (הקצאת הודעה):

<AssignMessage name="AssignMessage-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Copy>
    <Headers>
     <Header name="user-agent"/>
    </Headers>
  </Copy>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

הדוגמה הזו:

  • יצירת אובייקט חדש של הודעת בקשה בשם "MyCustomRequest".
  • ב-MyCustomRequest, המדיניות הזו:
    • העתקת הערך של כותרת ה-HTTP user-agent מהקובץ הנכנס להודעה החדשה. כי <Copy> משתמש בהפניה מוחלטת אל משתנה זרימה user-agent, אין צריך לציין את המאפיין source ל-<Copy>.
    • מגדיר את פרמטר השאילתה address בהודעה המותאמת אישית לערך של פרמטר השאילתה addy של הבקשה הנכנסת.
    • מגדיר את פועל ה-HTTP כ-GET.
  • הפרמטר <IgnoreUnresolvedVariables> מגדיר את הערך 'false'. כאשר <IgnoreUnresolvedVariables> הערך 'false' הוא 'false'. אם אחד מהמשתנים שהמדיניות מנסה להוסיף לא קיים, Edge יפסיק בתהליך ה-API.

דוגמה 2

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

<AssignMessage name="AssignMessage-2">
  <AssignTo createNew="true" type="request">partner.request</AssignTo>
  <Set>
    <Verb>POST</Verb>
    <Payload contentType="text/xml">
      <request><operation>105</operation></request>
    </Payload>
  </Set>
</AssignMessage>

בדוגמה הזו נוצרת בקשה חדשה בהתאמה אישית בשם 'partner.request'. לאחר מכן היא מגדירה <Verb> ו-<Payload> בבקשה החדשה.

ניתן לגשת להודעת בקשה מותאמת אישית במדיניות assignMessage אחרת שתופיע בהמשך את התהליך. הדוגמה הבאה מקבלת את הערך של הודעת הבקשה המותאמת אישית הכותרת user-agent:

<AssignMessage name="custom-request-1-access">
  <DisplayName>custom-request-1-access</DisplayName>
  <AssignTo createNew="false" type="request"></AssignTo>
  <Set>
    <Headers>
      <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header>
    </Headers>
  </Set>
</AssignMessage>

סרטונים

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

וידאו תיאור
למה להקצות מדיניות ההודעות? לקבל מידע על יתרונות השימוש במדיניות AssignMessage לשינוי בקשת ה-API או בלי לשנות את הקוד של הקצה העורפי.
העתקה של רכיבי API באמצעות מדיניות AssignMessage העתקת רכיבים מבקשה או מתשובה של API ויצירת בקשה או תשובה חדשות אובייקט באמצעות מדיניות AssignMessage.
הסרת ה-API רכיבים באמצעות מדיניות AssignMessage להסיר רכיבי API ולשנות את ה-API לפני שהוא יגיע לקצה העורפי של היעד באמצעות מדיניות AssignMessage.
הוספה והגדרה של API רכיבים באמצעות מדיניות AssignMessage לשנות בקשה או תגובה של API על ידי הוספת פרמטרים של שאילתה, כותרות, פרמטרים של טפסים או מטענים ייעודיים (payloads) שמשתמשים במדיניות AssignMessage.
יצירת אמוג'י בהתאמה אישית משתנים באמצעות מדיניות AssignMessage להגדיר משתני זרימה מותאמים אישית באמצעות מדיניות AssignMessage ולמנף את המשתנים ב- כללי מדיניות אחרים בשרת ה-proxy של ה-API.
חדש שליחת בקשה או תשובה לאובייקטים באמצעות מדיניות AssignMessage יצירת אובייקטים חדשים של בקשת API או תשובה באמצעות מדיניות AssignMessage ב-API בסביבת זמן ריצה.
יצירת הדמיה של API באמצעות מדיניות AssignMessage כדי ליצור הדמיה פשוטה של API ל-REST על ידי הוספת מדיניות AssignMessage בתשובה .
להגדיר או לשנות את מטען ייעודי (payload) באמצעות מדיניות AssignMessage המרה של בקשת REST לבקשת SOAP על ידי הגדרת מטען ייעודי (payload) של SOAP באמצעות המדיניות AssignMessage בזמן הריצה של API.

קודי שגיאה

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

שגיאות זמן ריצה

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

קוד תקלה סטטוס HTTP סיבה תיקון
steps.assignmessage.SetVariableFailed 500 המדיניות לא הצליחה להגדיר משתנה. שם המשתנה שלא נפתר מופיע במחרוזת השגיאה.
steps.assignmessage.VariableOfNonMsgType 500

השגיאה הזו מתרחשת אם המאפיין source ברכיב <Copy> מוגדר למשתנה שאינו מסוג message.

משתני סוג ההודעה מייצגים בקשות HTTP ותגובות HTTP שלמות. משתני התהליך המובנים של Edge‏ request,‏ response ו-message הם מסוג message. מידע נוסף על משתני הודעות זמין בחומר העזר בנושא משתנים.

steps.assignmessage.UnresolvedVariable 500

השגיאה הזו מתקבלת אם המשתנה שצוין במדיניות 'הקצאת הודעה' הוא:

  • מחוץ להיקף (לא זמין בתהליך הספציפי שבו המדיניות מתבצעת)
  • או
  • לא ניתן לפתור (לא מוגדר)

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

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

שם השגיאה סיבה תיקון
InvalidIndex אם האינדקס שצוין ברכיבים <Copy> ו/או <Remove> של מדיניות הקצאת ההודעות הוא 0 או מספר שלילי, הפריסה של שרת ה-API proxy תיכשל.
InvalidVariableName אם רכיב הצאצא <Name> ריק או לא צוין ברכיב <AssignVariable>, הפריסה של שרת ה-proxy ל-API נכשלת כי אין שם משתנה תקין שאפשר להקצות לו ערך. צריך להזין שם משתנה חוקי.
InvalidPayload מטען ייעודי (payload) שצוין במדיניות אינו חוקי.

משתני תקלה

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

משתנים איפה דוגמה
fault.name="fault_name" fault_name הוא שם השגיאה, כפי שמצוין בטבלה שגיאות זמן ריצה שלמעלה. שם השגיאה הוא החלק האחרון בקוד השגיאה. fault.name Matches "UnresolvedVariable"
assignmessage.policy_name.failed policy_name הוא השם שצוין על ידי המשתמש של המדיניות שגרמה לבעיה. assignmessage.AM-SetResponse.failed = true

דוגמה לתגובת שגיאה

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.assignmessage.VariableOfNonMsgType"
      },
      "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message"
   }
}

דוגמה לכלל תקלה

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults">
    <Step>
        <Name>AM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition>
    </Step>
    <Step>
        <Name>AM-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(assignmessage.failed = true) </Condition>
</FaultRule>

סכימות

כל סוג מדיניות מוגדר על ידי סכימת XML (.xsd). לידיעתך, סכימות של מדיניות זמינים ב-GitHub.

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

עבודה דוגמאות של מדיניות AssignMessage זמינות בדוגמאות של פלטפורמת API.

דוגמה מתקדמת יותר שממחישה איך לעקוף את target.url ProxyEndpoint מופיע במאמר הזה בקהילת Apigee.

כדי לראות את השדה 'הגדרת נתיב' במדיניות ServiceCallout, עיינו בהדרכה לדוגמה בדוגמאות של Apigee GitHub. פשוט משכפלים את המאגר לפעול לפי ההוראות באותו נושא. הדוגמה משתמשת במדיניות AssignMessage כדי להגדיר נתיב בקשה, אחר כך משתמש במדיניות בנושא יתרונות מרכזיים של שירות כדי לשלוח את הבקשה לשירות חיצוני.