خط مشی AssignMessage

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

چی

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

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

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

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

عنصر <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 name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

2: محموله را بردارید

مثال زیر بار را از پاسخ با عنصر <Remove> حذف می کند:

<AssignMessage name="AM-remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>response</AssignTo>
</AssignMessage>

3: پاسخ را اصلاح کنید

مثال زیر یک شی پاسخ موجود را با افزودن یک سربرگ به آن تغییر می دهد:

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

این مثال پیام جدیدی ایجاد نمی کند. در عوض، یک پیام پاسخ موجود را با افزودن یک هدر HTTP تغییر می‌دهد.

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

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

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

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

برای جاسازی متغیرهای جریان لبه در یک بار XML، متغیر تعیین‌شده را در پرانتزهای فرفری بپیچید، مانند این: {prefix.name} .

مثال زیر مقدار متغیر جریان هدر HTTP user-agent در یک عنصر XML به نام User-agent جاسازی می کند:

<AssignMessage name="AM-set-dynamic-content">
  <AssignTo>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="AM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

  1. سه متغیر جریان را در درخواست با مقادیر ثابت ایجاد می کند
  2. متغیرهای جریان را به صورت پویا در خط مشی دوم در جریان درخواست دریافت می کند
  3. آنها را در بار پاسخ تنظیم می کند
<!-- Policy #1: Set variables in the request -->

<AssignMessage name="AM-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>
</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 name="AM-Payload-from-SC-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
  <AssignTo>response</AssignTo>
</AssignMessage>

برای فهرست کردن تمام مقادیر هدر، به جای آن از متغیر زیر استفاده کنید:

{calloutResponse.header.Set-Cookie.values}

هر عنصر فرزند در این مرجع دارای نمونه های اضافی است. برای مثال‌های بیشتر، به مثال AssignMessage در GitHub مراجعه کنید.

مرجع عنصر کودک

این بخش عناصر فرزند <AssignMessage> را توصیف می کند.

<Add>

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

عنصر <Add> ویژگی های جدیدی را به پیام اضافه می کند که در پیام اصلی وجود ندارد. برای تغییر مقادیر خصوصیات موجود ، از عنصر <Set> استفاده کنید.

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

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

نحو s1

<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 s2

مثال زیر از عنصر <FormParams> برای دریافت مقادیر سه پارامتر رشته کوئری از درخواست اولیه و تنظیم آنها به عنوان پارامترهای فرم در درخواست نقطه پایانی هدف استفاده می کند:

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

مثال 2 s3

مثال زیر از عنصر <Headers> برای اضافه کردن سرصفحه partner-id به درخواستی که به نقطه پایانی هدف ارسال می شود استفاده می کند:

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

مثال 3 s4

مثال زیر از عنصر <QueryParams> برای افزودن یک پارامتر پرس و جو با مقدار ثابت به درخواست استفاده می کند:

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

این مثال از <Add> در پیش جریان درخواست استفاده می کند. اگر به نتایج در ابزاری مانند ابزار Trace نگاه کنید، درخواست https://example-target.com/get تبدیل https://example-target.com/get?myParam=42 می شود.

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

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

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

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

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

سینتکس s5

<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 s6

مثال زیر یک پارامتر فرم واحد ("پاسخ") و یک مقدار ثابت ("42") به درخواست اضافه می کند:

<AssignMessage name="AM-add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

مثال 2 s7

مثال زیر مقدار پارامتر name query را دریافت می کند و آن را به عنوان پارامتر فرم به درخواست اضافه می کند و سپس پارامتر query را حذف می کند:

<AssignMessage name="AM-Swap-QueryParam-to-FormParams">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
  <Remove>
    <QueryParam name="name"/>
  </Remove>
</AssignMessage>

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

مثال 3 s8

مثال زیر چندین پارامتر فرم را به درخواست اضافه می کند:

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

می توانید از ابزار Trace برای مشاهده جریان استفاده کنید. خواهید دید که بدنه درخواست حاوی داده های فرم کدگذاری شده با URL است که در ابتدا به عنوان پارامترهای رشته کوئری ارسال شده است:

username=nick&zip_code=90210&default_language=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> از نحو زیر استفاده می کند:

سینتکس s9

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

مثال 1 s10

مثال زیر یک هدر partner-id به پیام درخواست اضافه می‌کند و مقدار متغیر جریان verifyapikey.VAK-1.developer.app.partner-id را به آن سرصفحه اختصاص می‌دهد.

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

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

نحو s11

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

مثال 1 s12

مثال زیر پارامتر query "myParam" را به درخواست اضافه می کند و مقدار "42" را به آن اختصاص می دهد:

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</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> را مشخص کنید، اما مقدار متنی برای عنصر مشخص نکنید، این خط مشی بر روی درخواست یا پاسخ پیش فرض عمل می کند، که بر اساس محل اجرای خط مشی است. اگر خط مشی در جریان درخواست اجرا شود، پیام درخواست را تحت تأثیر قرار می دهد. اگر در جریان پاسخ اجرا شود، این خط مشی به طور پیش فرض بر پاسخ تأثیر می گذارد.

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

نحو s13

<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 s14

مثال زیر مشخص می کند که هدف، درخواست اصلی است که به نقطه پایانی هدف ارسال می شود:

<AssignMessage name="assignto-1">
<!-- DO NOT do this -->
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

مثال 2 s15

مثال زیر یک شی درخواست جدید ایجاد می کند:

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

هنگامی که یک درخواست یا شی پاسخ جدید ایجاد می کنید، سایر عناصر خط مشی AssignMessage (مانند <Add> ، <Set> و <Copy> ) روی آن شی درخواست جدید عمل می کنند.

می‌توانید بعداً در جریان به شی درخواست جدید در سیاست‌های دیگر دسترسی پیدا کنید، یا شی درخواست جدید را با یک خط‌مشی ServiceCallout به یک سرویس خارجی ارسال کنید.

مثال 3 s16

مثال زیر یک شی درخواست جدید با نام "MyRequestObject" ایجاد می کند:

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

هنگامی که یک درخواست یا شی پاسخ جدید ایجاد می کنید، سایر عناصر خط مشی AssignMessage (مانند <Add> ، <Set> و <Copy> ) روی آن شی درخواست جدید عمل می کنند.

می‌توانید بعداً در جریان به شی درخواست جدید در سیاست‌های دیگر دسترسی پیدا کنید، یا شی درخواست جدید را با یک خط‌مشی ServiceCallout به یک سرویس خارجی ارسال کنید.

جدول زیر ویژگی های <AssignTo> را شرح می دهد:

صفت توضیحات مورد نیاز؟ تایپ کنید
createNew

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

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

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

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

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

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

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

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

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

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

اختیاری رشته

<AssignVariable>

مقداری را به یک متغیر جریان اختصاص می دهد. اگر متغیر جریان وجود نداشته باشد، <AssignVariable> آن را ایجاد می کند.

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

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

  • Literal string: از عنصر فرزند <Value> برای تعیین مقدار رشته تحت اللفظی برای متغیر جریان استفاده کنید.
  • متغیر جریان: از عنصر فرزند <Ref> برای تعیین مقدار متغیر جریان موجود برای متغیر جریان مقصد استفاده کنید. برای فهرست کاملی از متغیرهای جریان که می‌توانند به عنوان منبع استفاده شوند، به مرجع متغیرهای جریان مراجعه کنید.
  • الگوی پیام: از عنصر فرزند <Template> برای تعیین یک الگوی پیام برای درونیابی استفاده کنید تا مقدار مورد نظر را در متغیر جریان مقصد قرار دهید.

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

نحو s17

<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 s18

مثال زیر مقدار یک متغیر جدید، myvar را به مقدار واقعی "42" تنظیم می کند:

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

مثال 2 s19

مثال زیر مقدار متغیر جریان 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 s20

مثال زیر از عنصر فرزند <Template> برای الحاق دو متغیر زمینه با یک رشته واقعی (یک خط فاصله) بین آنها استفاده می کند:

<AssignMessage name='AV-via-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> از نحو زیر استفاده می کند:

سینتکس s21

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

مثال 1 s22

مثال زیر متغیر مقصد را به عنوان 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 s23

مثال زیر مقدار متغیر جریان 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 s23

مثال زیر مقدار متغیر جریان 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 s24

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

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

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

سینتکس s25

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

مثال 1 s26

مثال زیر از نحو قالب پیام برای به هم پیوستن دو متغیر زمینه با یک رشته واقعی (یک خط فاصله) بین آنها استفاده می کند:

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

مثال 2 s27

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

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

مثال 3 s28

مثال زیر یک متغیر جریان و یک مقدار متن را مشخص می کند. در این حالت، اگر متغیر ارجاع شده غیر تهی باشد، از آن مقدار به عنوان الگو استفاده می شود. اگر مقدار ارجاع شده null باشد، از مقدار متن (در این مورد، {system.uuid}-{messageid} ) به عنوان الگو استفاده می شود. این الگو برای ارائه یک مقدار "Override" مفید است، جایی که در برخی موارد می‌خواهید الگوی پیش‌فرض (بخش متن) را با مقادیری که به صورت پویا تنظیم می‌شوند لغو کنید. به عنوان مثال، یک دستور شرطی ممکن است یک مقدار را از یک نقشه کلید-مقدار بگیرد و متغیر ارجاع شده را روی آن مقدار تنظیم کند:

<AssignMessage name='AV-template-with-fallback'> 
 <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> از نحو زیر استفاده می کند:

نحو s29

<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> مشخص نکنید، تمام قسمت‌های پیام منبع تعیین‌شده را کپی می‌کند.

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

Syntax s30

<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 s31

مثال زیر یک هدر، سه پارامتر فرم، مسیر و تمام پارامترهای پرس و جو را از پیام request به یک درخواست سفارشی جدید به نام newRequest کپی می کند:

<AssignMessage name="AM-copy-1">
  <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo>
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1"/>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1"/>
      <FormParam name="Form_Param_Name_2"/>
      <FormParam name="Form_Param_Name_3"/>
    </FormParams>
    <Path>true</Path>
    <QueryParams/>
  </Copy>
</AssignMessage>

از آنجا که عناصری مانند <Payload> و <Verb> وجود ندارند، این خط‌مشی آن بخش‌های پیام را کپی نمی‌کند.

مثال 2 s32

مثال زیر ابتدا همه چیز را در پیام response موجود حذف می کند، سپس تمام مقادیر را از پیام دیگری به نام secondResponse در پیام response کپی می کند:

<AssignMessage name='AM-Copy-Response'>
  <AssignTo createNew="false" transport="http" type="response">response</AssignTo>
  <!-- first remove any existing values -->
  <Remove/>
  <!-- then copy everything from the designated message -->
  <Copy source="secondResponse"/>
</AssignMessage>

عنصر <Copy> یک ویژگی دارد:

صفت توضیحات مورد نیاز؟ تایپ کنید
منبع

شی منبع کپی را مشخص می کند.

  • اگر source مشخص نشده باشد، به طور پیش‌فرض روی message قرار می‌گیرد که بسته به جریانی که سیاست در آن اجرا می‌شود، مقدار متفاوتی می‌گیرد. اگر خط مشی در جریان درخواست اجرا شود، متغیر message به شی request اشاره می کند. اگر خط مشی در جریان پاسخ اجرا شود، متغیر message به شی response اشاره می کند.
  • اگر متغیر منبع قابل حل نباشد یا به یک نوع غیر پیامی تبدیل شود، <Copy> پاسخ نمی دهد.
اختیاری رشته

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

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

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

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

سینتکس s33

<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 s34

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

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

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

مثال 3 s36

مثال زیر سه پارامتر فرم را در درخواست سفارشی "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 s37

اگر چند پارامتر فرم با یک نام وجود دارد، از دستور زیر استفاده کنید:

<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> از نحو زیر استفاده می کند:

سینتکس s38

<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 s39

مثال زیر هدر 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 s40

برای کپی کردن همه هدرها، از یک عنصر خالی <Headers> استفاده کنید، همانطور که در مثال زیر نشان داده شده است:

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

مثال 3 s41

اگر چندین هدر با یک نام وجود دارد، از دستور زیر استفاده کنید:

<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 s42

مثال زیر نشان می دهد که خط مشی 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> از نحو زیر استفاده می کند:

سینتکس s43

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

مثال 1 s44

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

<AssignMessage name="AM-copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

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

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

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

سینتکس s45

<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 s46

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

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

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

مثال 3 s48

اگر چندین پارامتر کوئری با یک نام وجود دارد، از دستور زیر استفاده کنید:

<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> از نحو زیر استفاده می کند:

سینتکس s49

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

مثال 1 s50

مثال زیر <ReasonPhrase> را روی true تنظیم می کند. با تعیین منبع و عنصر <AssignTo> ، این باعث می شود <Copy> عبارت دلیل را از پیام پاسخ نامگذاری شده به شی response کپی کند:

<AssignMessage name="AM-copy-reasonphrase-1">
  <Copy source="serviceCalloutResponse">
    <ReasonPhrase>true</ReasonPhrase>
  </Copy>
  <AssignTo>response</AssignTo>
</AssignMessage>

فقط زمانی می توانید از <ReasonPhrase> استفاده کنید که پیام های مبدأ و مقصد از نوع Response باشند.

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

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

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

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

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

نحو S52

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

مثال 1 S53

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

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

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

اگر "درست" باشد ، فعل موجود در ویژگی source <Copy> را به درخواست مشخص شده در عنصر <AssignTo> کپی می کند.

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

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

نحو S54

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

مثال 1 S55

مثال زیر <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> از نحو زیر استفاده می کند:

نحو S56

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

مثال 1 S57

مثال زیر <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> از نحو زیر استفاده می کند:

نحو S58

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

مثال 1 S59

مثال زیر مجموعه <IgnoreUnresolvedVariables> را به "true" تنظیم می کند:

<AssignMessage name="AM-Set-Headers">
  <Set>
    <Headers>
      <Header name='new-header'>{possibly-defined-variable}<Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
</AssignMessage>

از آنجا که <IgnoreUnresolvedVariables> true تنظیم شده است ، اگر متغیر possibly-defined-variable تعریف نشده باشد ، این سیاست خطایی نخواهد داشت.

<Remove>

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

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

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

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

نحو S60

<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 S61

مثال زیر بدن پیام را از پاسخ حذف می کند:

<AssignMessage name="AM-remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>response</AssignTo>
</AssignMessage>

در جریان پاسخ ، این خط مشی بدنه پاسخ را حذف می کند و فقط هدرهای HTTP را به مشتری باز می گرداند.

مثال 2 S62

مثال زیر تمام پارامترهای فرم و یک پارامتر پرس و جو را از شی request حذف می کند:

<AssignMessage name="AM-remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

مثال 3 S63

مثال زیر همه چیز را از یک شیء پیام حذف می کند:

<AssignMessage name="AM-remove-3">
  <Remove/>
  <AssignTo>request</AssignTo>
</AssignMessage>

به طور معمول شما این کار را فقط در صورتی انجام می دهید که از عنصر <Set> یا عنصر <Copy> استفاده کنید تا مقادیر جایگزینی را در پیام تنظیم کنید.

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

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

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

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

نحو S64

<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 S65

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

<AssignMessage name="AM-remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

مثال 2 S66

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

<AssignMessage name="AM-remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

مثال 3 S67

اگر پارامترهای چند فرم با همین نام وجود دارد ، از نحو زیر استفاده کنید:

<AssignMessage name="AM-remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</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 S68

مثال زیر عنوان user-agent را از درخواست حذف می کند:

<AssignMessage name="AM-remove-one-header">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

مثال 2 S69

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

<AssignMessage name="AM-remove-all-headers">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

مثال 3 S70

اگر چندین هدست با همین نام وجود دارد ، از نحو زیر استفاده کنید:

<AssignMessage name="AM-remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</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 S71

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

<AssignMessage name="AM-remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

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

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

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

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

نحو S72

<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 S73

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

<AssignMessage name="AM-remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

مثال 2 S74

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

<AssignMessage name="AM-remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

مثال 3 S75

اگر چندین پارامتر پرس و جو با همین نام وجود دارد ، از نحو زیر استفاده کنید:

<AssignMessage name="AM-remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

این مثال "QP1" ، "QP2" و مقدار دوم "QP3" را از درخواست حذف می کند. اگر "QP3" فقط یک مقدار دارد ، پس حذف نمی شود.

مثال 4 S76

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

<AssignMessage name="AM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

فقط در صورت رعایت معیارهای زیر می توانید از <QueryParams> استفاده کنید:

  • فعل http: دریافت کنید
  • نوع پیام: درخواست

<Set>

اطلاعات را در پیام درخواست یا پاسخ تنظیم می کند ، که توسط عنصر <AssignTo> مشخص شده است. <Set> هدر یا پرس و جو یا پارامترهای فرم را که قبلاً در پیام اصلی وجود دارد ، بازنویسی کنید. هدر و پرس و جو و پارامترهای فرم در یک پیام HTTP ممکن است مقادیر مختلفی را در خود جای دهد. برای افزودن مقادیر اضافی برای یک هدر یا پارامتر ، به جای آن از عنصر <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 S77

مثال زیر یک عنوان خاص را تعیین می کند. هنگامی که این خط مشی در جریان درخواست وصل شده است ، به سیستم بالادست اجازه می دهد تا یک عنوان اضافی را که در درخواست ورودی اصلی گنجانده نشده است ، دریافت کند.

<AssignMessage name="AM-Set-Header">
  <Set>
    <Headers>
        <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header>
    </Headers>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

مثال 2 S78

مثال زیر بار را برای پاسخ و همچنین هدر Content-Type بازنویسی می کند.

<AssignMessage name="AM-Overwrite-Payload">
  <Set>
    <Payload contentType="application/json">{ "status" : 42 }</Payload>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

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

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

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

نحو S79

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

مثال 1 S80

مثال زیر یک پارامتر فرم به نام "MyParam" را به مقدار متغیر request.header.myparam header.myparam در یک درخواست جدید و سفارشی تنظیم می کند:

<AssignMessage name="AM-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> از نحو زیر استفاده می کند:

نحو S81

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

مثال 1 S81

مثال زیر عنوان x-ratelimit-remaining را به مقدار ratelimit.Quota-1.available.count متغیر تنظیم می کند:

<AssignMessage name="AM-Set-RateLimit-Header">
  <Set>
    <Headers>
      <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header>
    </Headers>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

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

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

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

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

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

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

نحو S82

<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 S83

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

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

مثال 2 S84

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

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

مثال 3 S85

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

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

در نسخه های قبلی Apigee ، شما نمی توانید از بریس های فرفری استفاده کنید تا منابع متغیر را در بارهای JSON نشان دهید. در این نسخه ها ، برای مشخص کردن شخصیت های تعیین کننده ، باید از ویژگی های variablePrefix و variableSuffix استفاده کنید و از آنها برای بسته بندی نام های متغیر استفاده کنید ، مانند این:

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

این نحو قدیمی هنوز هم کار می کند.

مثال 4 S86

محتوای <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> از نحو زیر استفاده می کند:

نحو S87

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

مثال 1 S88

مثال زیر پارامتر پرس و جو "آدرس" را به مقدار متغیر request.header.address تنظیم می کند:

<AssignMessage name="AM-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> از نحو زیر استفاده می کند:

نحو S89

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

مثال 1 S90

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

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

مثال 2 S91

محتوای <ReasonPhrase> به عنوان الگوی پیام رفتار می شود. این بدان معنی است که یک نام متغیر پیچیده شده در بریس های فرفری در زمان اجرا با مقدار متغیر ارجاع شده جایگزین می شود ، همانطور که مثال زیر نشان می دهد:

<AssignMessage name="AM-set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

فقط در صورت رعایت معیارهای زیر می توانید از <ReasonPhrase> استفاده کنید:

  • نوع پیام: پاسخ

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

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

مقدار پیش فرض "200" (هنگامی که ویژگی createNew <AssignTo> روی "True" تنظیم شده است)
مورد نیاز؟ اختیاری
تایپ کنید رشته یا variable
عنصر والد <Set>
عناصر کودک هیچ کدام

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

نحو S92

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

مثال 1

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

<AssignMessage name="AM-set-statuscode-404">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</AssignMessage>

مثال 2

محتوای <StatusCode> به عنوان الگوی پیام رفتار می شود. این بدان معنی است که یک نام متغیر پیچیده شده در بریس های فرفری در زمان اجرا با مقدار متغیر ارجاع شده جایگزین می شود ، همانطور که مثال زیر نشان می دهد:

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</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 S93

مثال زیر یک فعل ساده را در درخواست تنظیم می کند:

<AssignMessage name="AM-set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

مثال 2 S94

محتوای <Verb> به عنوان یک الگوی پیام رفتار می شود. این بدان معنی است که یک نام متغیر پیچیده شده در بریس های مجعد در زمان اجرا با مقدار متغیر ارجاع شده جایگزین می شود.

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

<AssignMessage name="AM-set-verb-to-dynamic-value">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</AssignMessage>

شما می توانید فقط در صورت رعایت معیارهای زیر از <Verb> استفاده کنید:

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

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

نسخه HTTP را در یک درخواست تنظیم می کند. این عنصر هیچ تاثیری در پاسخ ندارد.

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

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

نحو S95

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

مثال 1 S96

مثال زیر شماره نسخه را روی "1.1" تنظیم می کند:

<AssignMessage name="AM-set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
 </AssignMessage>

مثال 2

در زیر از یک متغیر در بریس های فرفری برای تنظیم شماره نسخه استفاده می کند:

<AssignMessage name="AM-set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo>request</AssignTo>
</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 متوقف می کند.