خط مشی AssignMessage

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

چی

خط مشی AssignMessage پیام های درخواست و پاسخ جدیدی را در جریان پروکسی API تغییر می دهد یا ایجاد می کند. این خط‌مشی به شما امکان می‌دهد اقدامات زیر را روی آن پیام‌ها انجام دهید:

  • پارامترهای فرم جدید، سرصفحه ها یا پارامترهای پرس و جو را به پیام اضافه کنید
  • ویژگی های موجود را از یک پیام به پیام دیگر کپی کنید
  • هدرها، پارامترهای پرس و جو، پارامترهای فرم و/یا بارهای پیام را از پیام حذف کنید
  • مقدار خواص موجود را در یک پیام تنظیم کنید

با خط‌مشی AssignMessage، معمولاً ویژگی‌های درخواست یا پاسخ را اضافه، تغییر یا حذف می‌کنید. با این حال، می‌توانید از خط‌مشی AssignMessage برای ایجاد یک درخواست یا پیام پاسخ سفارشی و ارسال آن به یک هدف جایگزین استفاده کنید، همانطور که در ایجاد پیام‌های درخواست سفارشی توضیح داده شده است.

خط مشی AssignMessage می تواند متغیرهای جریان را با عناصر فرزند زیر ایجاد یا تغییر دهد:

عنصر <AssignMessage>

یک خط مشی AssignMessage را تعریف می کند.

مقدار پیش فرض به برگه سیاست پیش‌فرض در زیر مراجعه کنید
مورد نیاز؟ مورد نیاز
تایپ کنید شیء پیچیده
عنصر والد n/a
عناصر کودک <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 UI اضافه می کنید، مثال زیر تنظیمات پیش فرض را نشان می دهد:

<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 وارد می‌کنید، الگو شامل موارد خرد برای تمام عملیات‌های ممکن است. معمولاً، شما انتخاب می‌کنید که کدام عملیات را می‌خواهید با این خط‌مشی انجام دهید و بقیه عناصر فرزند را حذف می‌کنید. برای مثال، اگر می‌خواهید عملیات کپی را انجام دهید، از عنصر <Copy> استفاده کنید و <Add> ، <Remove> و سایر عناصر فرزند را از خط‌مشی حذف کنید تا خواناتر شود.

این عنصر دارای ویژگی های زیر است که در همه سیاست ها مشترک است:

صفت پیش فرض ضروری؟ شرح
name N/A ضروری

نام داخلی سیاست. مقدار مشخصه name می تواند شامل حروف، اعداد، فاصله، خط تیره، زیرخط و نقطه باشد. این مقدار نمی تواند بیش از 255 کاراکتر باشد.

در صورت تمایل، از عنصر <DisplayName> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

continueOnError نادرست اختیاری برای بازگرداندن خطا در صورت شکست خط مشی، روی "false" تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است. روی "true" تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.
enabled درست است، واقعی اختیاری برای اجرای این خط‌مشی روی «درست» تنظیم کنید. برای «خاموش کردن» خط مشی، روی «نادرست» تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.
async نادرست منسوخ این ویژگی منسوخ شده است.

جدول زیر توضیحات سطح بالایی از عناصر فرزند <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: محموله را بردارید

مثال زیر بار را از پاسخ با عنصر <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 به عنوان "response" مشخص می کند، این خط مشی شی پاسخی را که توسط سرور هدف برگردانده شده است، تغییر می دهد.

هدر HTTP که توسط این خط‌مشی به پیام پاسخ اضافه می‌شود، از متغیری مشتق شده است که توسط خط‌مشی LookupCache پر شده است. بنابراین پیام پاسخ اصلاح شده توسط این خط مشی Assign Message حاوی یک سربرگ HTTP است که نشان می دهد آیا نتایج از حافظه پنهان خارج شده اند یا خیر. تنظیم هدر در پاسخ می تواند برای اشکال زدایی و عیب یابی مفید باشد.

4: محتوای پویا را تنظیم کنید

می توانید از Assign Message برای جاسازی محتوای پویا در محموله پیام های پاسخ و درخواست استفاده کنید.

برای جاسازی متغیرهای جریان لبه در یک بار 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>

برای بارهای 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: پارامتر query را حذف کنید

مثال زیر پارامتر query apikey را از درخواست حذف می کند:

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

هنگامی که از خط مشی VerifyAPIKey برای احراز هویت کاربر استفاده می کنید، بهترین روش حذف پارامتر query apikey از پیام درخواست است. شما این کار را برای جلوگیری از ارسال اطلاعات کلیدی حساس به هدف باطن انجام می دهید.

6: تنظیم/دریافت متغیرها

مثال زیر از سه خط مشی Assign Message استفاده می کند:

  1. سه متغیر جریان را در درخواست با مقادیر ثابت ایجاد می کند
  2. متغیرهای جریان را به صورت پویا در خط مشی دوم در جریان درخواست دریافت می کند
  3. آنها را در بار پاسخ تنظیم می کند
<!-- 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> برای اضافه کردن متغیرها به پاسخ استفاده می کند. مثال زیر در پاسخی که Edge به مشتری برمی گرداند، یک بار XML ایجاد می کند:
    <!-- 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. یک درخواست به پروکسی 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: هدرهای پاسخ سرویس Callout را دریافت کنید

در مثال زیر، فرض کنید که یک خط مشی ServiceCallout در درخواست پراکسی API وجود دارد و پاسخ فراخوانی حاوی چندین سرصفحه با یک نام ( Set-Cookie ) است. با فرض اینکه متغیر پاسخ Service Callout، 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> استفاده کنید.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید نوع پیچیده
عنصر والد <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> برای دریافت مقادیر سه پارامتر رشته کوئری از درخواست اولیه و تنظیم آنها به عنوان پارامترهای فرم در درخواست نقطه پایانی هدف استفاده می کند:

<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> در پیش جریان درخواست استفاده می کند. اگر به نتایج در ابزاری مانند ابزار Trace نگاه کنید، درخواست "http://httpbin.org/get" به "http://httpbin.org/get?myParam=42" تبدیل می شود.

عناصر فرزند <Add> از جایگزینی رشته پویا پشتیبانی می کنند که به عنوان قالب پیام شناخته می شود.

<FormParams> (فرزند <Add> )

پارامترهای فرم جدید را به پیام درخواست اضافه می کند. این عنصر هیچ تاثیری بر پیام پاسخ ندارد.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید آرایه ای از عناصر <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

مثال زیر یک پارامتر فرم واحد ("پاسخ") و یک مقدار ثابت ("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

مثال زیر مقدار پارامتر رشته query 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>

این مثال پارامترهای رشته پرس و جو را از درخواست مبدأ دریافت می کند و آنها را به عنوان پارامترهای فرم به درخواست ارسال شده به نقطه پایانی هدف اضافه می کند.

می توانید از ابزار Trace برای مشاهده جریان استفاده کنید. خواهید دید که بدنه درخواست حاوی داده های فرم کدگذاری شده با 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 درخواست را قبل از ارسال پیام به سرویس مورد نظر روی "application/x-www-form-urlencoded" تنظیم می کند.

<Headers> (فرزند <Add> )

هدرهای جدیدی را به درخواست یا پاسخ مشخص شده اضافه می کند که توسط عنصر <AssignTo> مشخص شده است.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید آرایه ای از عناصر <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> )

پارامترهای پرس و جو جدیدی را به درخواست اضافه می کند. این عنصر هیچ تاثیری در پاسخ ندارد.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید آرایه ای از عناصر <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

مثال زیر پارامتر query "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
  • نوع پیام: درخواستی

علاوه بر این، تنها زمانی می توانید پارامترهای پرس و جو را تنظیم کنید که ویژگی type عنصر <AssignTo> یک پیام درخواست باشد. تنظیم آنها بر روی پاسخ هیچ تاثیری ندارد.

اگر یک آرایه خالی از پارامترهای پرس و جو را در خط مشی خود تعریف کنید ( <Add><QueryParams/></Add> )، این خط مشی هیچ پارامتر پرس و جو اضافه نمی کند. این همان حذف <QueryParams> است.

<AssignTo>

تعیین می کند که خط مشی AssignMessage روی کدام شی کار می کند. گزینه ها عبارتند از:

  • پیام درخواست: request دریافت شده توسط پراکسی API
  • پیام پاسخ: response از سرور مورد نظر برگردانده شده است
  • پیام سفارشی: یک درخواست یا پاسخ سفارشی

توجه داشته باشید که در برخی موارد، نمی توانید شیئی را که خط مشی AssignMessage روی آن عمل می کند، تغییر دهید. برای مثال، نمی توانید از <Add> یا <Set> برای افزودن یا تغییر پارامترهای پرس و جو ( <QueryParams> ) یا پارامترهای فرم ( <FormParams> ) در پاسخ استفاده کنید. شما فقط می توانید پارامترهای پرس و جو و پارامترهای فرم را در درخواست دستکاری کنید.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید رشته
عنصر والد <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

تعیین می کند که آیا این خط مشی هنگام تخصیص مقادیر، پیام جدیدی ایجاد می کند.

اگر "درست" باشد، این خط مشی یک متغیر جدید از نوع مشخص شده توسط type (یا "درخواست" یا "پاسخ") ایجاد می کند. اگر نام متغیر جدید را مشخص نکنید، سیاست یک درخواست یا شی پاسخ جدید را بر اساس مقدار type ایجاد می کند.

اگر "نادرست" باشد، سیاست به یکی از دو روش پاسخ می دهد:

  • اگر <AssignTo> بتواند نام متغیر را برای یک درخواست یا پاسخ حل کند، پردازش آن ادامه می یابد. به عنوان مثال، اگر سیاست در یک جریان درخواست باشد، متغیر، شی درخواست است. اگر خط مشی در یک پاسخ باشد، متغیر شی پاسخ است.
  • اگر <AssignTo> قابل حل نباشد، یا به نوع غیر پیامی حل شود، خط مشی خطایی ایجاد می کند.

اگر createNew مشخص نشده باشد، این خط مشی به یکی از دو روش پاسخ می دهد:

  • اگر <AssignTo> به یک پیام حل شود، پردازش به مرحله بعدی می رود.
  • اگر <AssignTo> قابل حل نباشد یا به یک نوع غیر پیامی حل شود، یک متغیر جدید از نوع مشخص شده در type ایجاد می شود.
اختیاری بولی
transport

نوع انتقال را برای نوع پیام درخواست یا پاسخ مشخص می کند.

مقدار پیش فرض "http" است (تنها مقدار پشتیبانی شده).

اختیاری رشته
type نوع پیام جدید را مشخص می کند، زمانی که createNew "true" باشد. مقادیر معتبر "درخواست" یا "پاسخ" هستند.

مقدار پیش فرض "درخواست" است. اگر این ویژگی را حذف کنید، Edge بسته به اینکه این سیاست در کجای جریان اجرا می‌شود، یک درخواست یا پاسخ ایجاد می‌کند.

اختیاری رشته

<AssignVariable>

مقداری را به متغیر جریان مقصد اختصاص می دهد (مثلاً متغیری که مقدار آن توسط خط مشی AssignMessage تنظیم شده است). اگر متغیر جریان وجود نداشته باشد، <AssignVariable> آن را ایجاد می کند.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید نوع پیچیده
عنصر والد <AssignMessage>
عناصر کودک <Name> (الزامی)
<Ref>
<Template>
<Value>

مقداری که به متغیر جریان مقصد اختصاص می دهید می تواند یکی از موارد زیر باشد:

  • Literal string: از عنصر فرزند <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 و مقدار پارامتر query 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 flow وجود نداشته باشند، <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> نامگذاری شده وجود نداشته باشد، خط مشی یک متغیر با آن نام ایجاد می کند.

مقدار پیش فرض n/a
مورد نیاز؟ مورد نیاز
تایپ کنید رشته
عنصر والد <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> استفاده کنید.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید رشته
عنصر والد <AssignVariable>
عناصر کودک هیچ کدام

وقتی یک متغیر جریان را با <Ref> مشخص می‌کنید، براکت‌های "{}" را که معمولاً برای ارجاع به متغیر جریان استفاده می‌کنید، حذف کنید. به عنوان مثال، برای تنظیم مقدار متغیر جدید خود به مقدار متغیر client.host flow:

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

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

برای تعریف یک مقدار پیش فرض برای متغیر جریان مقصد، از <Value> در ترکیب با <Ref> استفاده کنید. اگر متغیر جریان مشخص شده توسط <Ref> وجود نداشته باشد، قابل خواندن نباشد یا تهی باشد، 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 و مقدار پارامتر query 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 و مقدار پارامتر query 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> تنظیم مقدار پیش فرض پارامتر پرس و جو، سرصفحه یا مقدار دیگری است که می تواند همراه با درخواست ارسال شود. به عنوان مثال، شما یک پراکسی 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 را دریافت کرده و آن را به خود اختصاص می دهد. اگر متغیر جریان تهی باشد، به این معنی که پارامتر پرس و جو "w" از درخواست حذف شده است، این مثال از مقدار پیش فرض عنصر <Value> استفاده می کند. بنابراین، می‌توانید درخواستی به این پراکسی API بدهید که پارامتر کوئری «w» را حذف می‌کند:

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

... و همچنان پروکسی API یک نتیجه معتبر را بازگرداند.

برخلاف هنگام استفاده از <Value> ، مقدار <Ref> باید یک متغیر جریان باشد، مانند ویژگی یک request ، response یا شی target . مقدار همچنین می تواند یک متغیر جریان سفارشی باشد که شما ایجاد کرده اید.

اگر متغیر جریانی را مشخص کنید که برای مقدار <Ref> وجود نداشته باشد و مقدار <IgnoreUnresolvedVariables> "true" باشد، Edge خطایی ایجاد می کند.

<Template> (فرزند <AssignVariable> )

یک الگوی پیام را مشخص می کند. یک الگوی پیام به شما امکان می‌دهد تا زمانی که خط‌مشی اجرا می‌شود، رشته متغیر را جایگزین کنید، و می‌تواند رشته‌های تحت اللفظی را با نام متغیرهای پیچیده شده در پرانتزهای فرفری ترکیب کند. علاوه بر این، الگوهای پیام از عملکردهایی مانند فرار و تبدیل پرونده پشتیبانی می کنند.

از ویژگی ref برای تعیین یک متغیر جریان استفاده کنید که در آن مقدار متغیر یک الگوی پیام است. به عنوان مثال، می توانید یک الگوی پیام را به عنوان یک ویژگی سفارشی در یک برنامه توسعه دهنده ذخیره کنید. هنگامی که Edge برنامه توسعه دهنده را پس از تأیید کلید API یا رمز امنیتی (از طریق یک خط مشی اضافی) شناسایی می کند، عنصر <AssignVariable> می تواند از الگوی پیام از ویژگی سفارشی برنامه استفاده کند، که به عنوان یک متغیر جریان از خط مشی امنیتی موجود است. مثال زیر فرض می‌کند که الگوی پیام در یک ویژگی مشتری به نام message_template در برنامه توسعه‌دهنده‌ای که تماس API را انجام می‌دهد، موجود است، جایی که از خط‌مشی VerifyAPIKey برای تأیید کلید API برنامه استفاده شده است:

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

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید رشته
عنصر والد <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 باشد، از مقدار متن (در این مورد، {system.uuid}-{messageid} ) به عنوان الگو استفاده می شود. این الگو برای ارائه یک مقدار "Override" مفید است، جایی که در برخی موارد می‌خواهید الگوی پیش‌فرض (بخش متن) را با مقادیری که به صورت پویا تنظیم می‌شوند لغو کنید. به عنوان مثال، یک دستور شرطی ممکن است یک مقدار را از یک نقشه کلید-مقدار بگیرد و متغیر ارجاع شده را روی آن مقدار تنظیم کند:

<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> استفاده کنید.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید رشته
عنصر والد <AssignVariable>
عناصر کودک هیچ کدام

هنگامی که در ترکیب با عنصر <Ref> استفاده می شود، <Value> به عنوان مقدار پیش فرض (یا بازگشتی) عمل می کند. اگر <Ref> مشخص نشده باشد، غیرقابل حل باشد یا تهی باشد، از مقدار <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 و مقدار پارامتر query 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> مشخص نکنید، این خط مشی مقادیر را در درخواست یا پاسخ کپی می کند، بسته به اینکه این سیاست در کجای جریان اجرا می شود.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید رشته
عنصر والد <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 مشخص نشده باشد، به عنوان یک پیام ساده تلقی می شود. به عنوان مثال، اگر خط مشی در جریان درخواست باشد، منبع به طور پیش‌فرض روی شی request قرار می‌گیرد. اگر این خط مشی در جریان پاسخ باشد، به طور پیش فرض روی شی response قرار می گیرد. اگر source حذف کنید، می توانید از یک مرجع مطلق به یک متغیر جریان به عنوان منبع کپی استفاده کنید. به عنوان مثال، مقدار را به عنوان {request.header.user-agent} مشخص کنید.
  • اگر متغیر منبع قابل حل نباشد، یا به نوع غیر پیامی تبدیل شود، <Copy> پاسخ نمی دهد.
اختیاری رشته

<FormParams> (فرزند <Copy> )

پارامترهای فرم را از درخواست مشخص شده توسط ویژگی source عنصر <Copy> به درخواست مشخص شده توسط عنصر <AssignTo> کپی می کند. این عنصر هیچ تاثیری در پاسخ ندارد.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید آرایه ای از عناصر <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

مثال زیر تمام پارامترهای فرم را در درخواست سفارشی "MyCustomRequest" کپی می کند:

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

مثال 3

مثال زیر سه پارامتر فرم را در درخواست سفارشی "MyCustomRequest" کپی می کند:

<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 پیام را روی "application/x-www-form-urlencoded" تنظیم می کند.

<Headers> (فرزند <Copy> )

سرصفحه های HTTP را از درخواست یا پیام پاسخ مشخص شده توسط ویژگی source عنصر <Copy> به درخواست یا پیام پاسخ مشخص شده توسط عنصر <AssignTo> کپی می کند.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید آرایه ای از عناصر <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> )

تعیین می کند که آیا مسیر باید از درخواست منبع به درخواست مقصد کپی شود یا خیر. این عنصر هیچ تاثیری در پاسخ ندارد.

اگر "درست" باشد، این خط مشی مسیر را از پیام درخواست مشخص شده توسط ویژگی 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> )

تعیین می کند که آیا محموله باید از مبدا تا مقصد کپی شود یا خیر. منبع و مقصد می تواند درخواست یا پاسخ باشد.

اگر «درست» باشد، این خط‌مشی بارگذاری را از پیام مشخص‌شده توسط ویژگی 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> کپی می کند. این عنصر هیچ تاثیری در پاسخ ندارد.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید آرایه ای از عناصر <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

مثال زیر پارامتر query "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> )

تعیین می کند که آیا عبارت دلیل باید از پاسخ منبع به پاسخ مقصد کپی شود یا خیر. این عنصر هیچ تاثیری روی درخواست ندارد.

اگر "درست" باشد، این خط مشی 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> )

تعیین می کند که آیا کد وضعیت از پاسخ منبع به پاسخ مقصد کپی شده است یا خیر. این عنصر هیچ تاثیری روی درخواست ندارد.

اگر "درست" باشد، این خط مشی کد وضعیت را از پیام پاسخ مشخص شده توسط ویژگی 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> این است که اطمینان حاصل شود که پاسخ پروکسی دارای وضعیت مشابه پاسخ دریافت شده از هدف در هنگام createNew ویژگی <AssignTo> در "True" است.

<Verb> (فرزند <Copy> >)

تعیین می کند که آیا فعل HTTP از درخواست منبع به درخواست مقصد کپی شده است یا خیر. این عنصر هیچ تاثیری در پاسخ ندارد.

اگر "درست" باشد ، فعل موجود در ویژگی 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 از درخواست منبع به درخواست مقصد کپی شده است یا خیر. این عنصر هیچ تاثیری در پاسخ ندارد.

اگر "درست" باشد ، نسخه 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 برای برچسب گذاری خط مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و طبیعی تر، از آن استفاده کنید.

عنصر <DisplayName> در همه خط مشی ها مشترک است.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری. اگر <DisplayName> حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود
تایپ کنید رشته
عنصر والد < PolicyElement >
عناصر کودک هیچ کدام

عنصر <DisplayName> از نحو زیر استفاده می کند:

نحو

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

مثال

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

عنصر <DisplayName> هیچ ویژگی یا عنصر فرزند ندارد.

<IgnoreUnresolvedVariables>

تعیین می کند که آیا پردازش در هنگام مواجهه با یک متغیر حل نشده متوقف می شود.

مقدار پیش فرض نادرست
مورد نیاز؟ اختیاری
تایپ کنید بولی
عنصر والدین <AssignMessage>
عناصر کودک هیچ کدام

تنظیم شده است تا متغیرهای حل نشده را true بگیرید و پردازش را ادامه دهید. در غیر این صورت false . مقدار پیش فرض false است.

تنظیم <IgnoreUnresolvedVariables> to true با تنظیم <AssignMessage> continueOnError به 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>

هدر ، پارامترهای پرس و جو ، پارامترهای فرم و/یا بار پیام را از یک پیام حذف می کند. پیام می تواند یک درخواست یا پاسخ باشد. شما مشخص می کنید که با استفاده از عنصر <AssignTo> ، کدام پیام <Remove> عمل می کند.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید نوع پیچیده
عنصر والدین <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> )

پارامترهای فرم مشخص شده را از درخواست حذف می کند. این عنصر هیچ تاثیری در پاسخ ندارد.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید مجموعه ای از عناصر <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 : "برنامه/X-www-form-urlencoded"

<Headers> (فرزند <Remove> )

هدرهای مشخص شده HTTP را از درخواست یا پاسخ حذف می کند ، که توسط عنصر <AssignTo> مشخص شده است.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید آرایه ای از عناصر <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> >)

تعیین می کند که آیا <Remove> بار را در درخواست یا پاسخ حذف می کند ، که توسط عنصر <AssignTo> مشخص شده است. برای پاک کردن بار ، روی "درست" تنظیم کنید. در غیر این صورت "کاذب". مقدار پیش فرض "نادرست" است.

مقدار پیش فرض نادرست
مورد نیاز؟ اختیاری
تایپ کنید بولی
عنصر والدین <Remove>
عناصر کودک هیچ کدام

عنصر <Payload> از نحو زیر استفاده می کند:

نحو

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

مثال 1

مثال زیر <Payload> به "درست" تنظیم می کند تا بار درخواست پاک شود:

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

<QueryParams> (فرزند <Remove> >)

پارامترهای مشخص شده پرس و جو را از درخواست حذف می کند. این عنصر هیچ تاثیری در پاسخ ندارد.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید مجموعه ای از عناصر <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: دریافت کنید
  • نوع پیام: درخواست

<Set>

اطلاعات را در پیام درخواست یا پاسخ تنظیم می کند ، که توسط عنصر <AssignTo> مشخص شده است. <Set> هدر یا پارامترهایی را که قبلاً در پیام اصلی وجود دارد ، بازنویسی کنید. برای ایجاد یک هدر یا پارامتر جدید ، به جای آن از عنصر <Add> استفاده کنید.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید نوع پیچیده
عنصر والدین <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> )

پارامترهای فرم موجود را در یک درخواست بازنویسی می کند و آنها را با مقادیر جدیدی که با این عنصر مشخص می کنید جایگزین می کند. این عنصر هیچ تاثیری در پاسخ ندارد.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید مجموعه ای از عناصر <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 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: پست
  • نوع پیام: درخواست

اگر پارامترهای فرم خالی را در خط مشی خود تعریف می کنید ( <Add><FormParams/></Add> ) ، این خط مشی به هیچ پارامتر فرم اضافه نمی کند. این همان حذف <FormParams> است.

<Set> قبل از ارسال آن به نقطه انتهایی هدف Content-Type پیام را به "برنامه/x-www-form-urlencoded" تغییر می دهد.

<Headers> (فرزند <Set> )

سرپرستان HTTP موجود را در درخواست یا پاسخ ، که توسط عنصر <AssignTo> مشخص شده است ، بازنویسی کنید.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید آرایه ای از عناصر <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> مشخص شده است. بار بار می تواند هر نوع محتوای معتبر مانند متن ساده ، 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

مثال زیر یک بار متن ساده را تعیین می کند:

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

مثال 2

مثال زیر بار JSON را تعیین می کند:

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

مثال 3

مثال زیر مقادیر متغیر را با بسته بندی نام های متغیر در بریس های فرفری وارد بار می کند:

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

در نسخه های قدیمی Apigee Edge - به عنوان مثال ، قبل از انتشار ابر 16.08.17 - شما نمی توانید از بریس های فرفری استفاده کنید تا منابع متغیر را در بارهای 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 جایگزین متغیرهای پیچیده شده در بریس های فرفری با مقدار متغیرهای ارجاع شده در زمان اجرا می شود.

مثال زیر از نحو Braces Braces استفاده می کند تا بخشی از بار را به یک مقدار متغیر تنظیم کند:

<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 به صورت اختیاری تعیین کننده پیشرو در یک متغیر جریان را مشخص می کند. پیش فرض به "{". برای اطلاعات بیشتر ، به مرجع متغیرهای جریان مراجعه کنید. اختیاری Char
variableSuffix به صورت اختیاری تعیین کننده دنباله دار را در یک متغیر جریان مشخص می کند. پیش فرض به "}". برای اطلاعات بیشتر ، به مرجع متغیرهای جریان مراجعه کنید. اختیاری Char

<QueryParams> (فرزند <Set> )

پارامترهای پرس و جو موجود را در درخواست با مقادیر جدید بازنویسی می کند. این عنصر هیچ تاثیری در پاسخ ندارد.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید مجموعه ای از عناصر <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: دریافت کنید
  • نوع پیام: درخواست

اگر پارامترهای پرس و جو خالی را در خط مشی خود تعریف کنید ( <Set><QueryParams/></Set> ) ، این خط مشی هیچ پارامتر پرس و جو را تعیین نمی کند. این همان حذف <QueryParams> است.

<ReasonPhrase> (کودک <Set> )

عبارت دلیل را در پاسخ تنظیم می کند. این به طور معمول برای اشکال زدایی در ترکیب با <StatusCode> انجام می شود. این عنصر هیچ تاثیری در درخواست ندارد.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید رشته
عنصر والدین <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 را در درخواست تنظیم می کند. این عنصر هیچ تاثیری در پاسخ ندارد.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید رشته یا 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 را در یک درخواست تنظیم می کند. این عنصر هیچ تاثیری در پاسخ ندارد.

مقدار پیش فرض n/a
مورد نیاز؟ اختیاری
تایپ کنید رشته یا 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> استفاده کنید:

  • نوع پیام: درخواست

مثال زیر یک شیء درخواست سفارشی با 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 Query درخواست ورودی تنظیم می کند.
    • فعل HTTP را برای GET تنظیم می کند.
  • مجموعه <IgnoreUnresolvedVariables> را به "نادرست" تنظیم می کند. هنگامی که <IgnoreUnresolvedVariables> "نادرست" است ، اگر یکی از متغیرهای این سیاست سعی کند اضافه شود ، Edge پردازش را در جریان API متوقف می کند.