Политика AssignMessage

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Что

Политика AssignMessage изменяет или создает новые сообщения запросов и ответов во время потока прокси-сервера API. Политика позволяет выполнять следующие действия над этими сообщениями:

  • Добавление в сообщение новых параметров формы, заголовков или параметров запроса.
  • Копирование существующих свойств из одного сообщения в другое
  • Удаление заголовков, параметров запроса, параметров формы и/или полезных данных сообщения из сообщения.
  • Установить значение существующих свойств в сообщении

С помощью политики AssignMessage вы обычно добавляете, изменяете или удаляете свойства запроса или ответа. Однако вы также можете использовать политику AssignMessage для создания настраиваемого сообщения запроса или ответа и передачи его альтернативному целевому объекту, как описано в разделе Создание настраиваемых сообщений запроса .

Политика AssignMessage может создавать или изменять переменные потока со следующими дочерними элементами:

Элемент <AssignMessage>

Определяет политику AssignMessage.

Значение по умолчанию См. вкладку «Политика по умолчанию» ниже.
Необходимый? Необходимый
Тип Сложный объект
Родительский элемент н/д
Дочерние элементы <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

Элемент <AssignMessage> использует следующий синтаксис:

Синтаксис

Элемент <AssignMessage> использует следующий синтаксис:

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

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

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

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

  <DisplayName>policy_display_name</DisplayName>

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

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

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

</AssignMessage>

Политика по умолчанию

В следующем примере показаны настройки по умолчанию при добавлении политики AssignMessage в поток в пользовательском интерфейсе Edge:

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

Когда вы вставляете новую политику AssignMessage в пользовательский интерфейс Edge, шаблон содержит заглушки для всех возможных операций. Обычно вы выбираете, какие операции вы хотите выполнить с этой политикой, и удаляете остальные дочерние элементы. Например, если вы хотите выполнить операцию копирования, используйте элемент <Copy> и удалите <Add> , <Remove> и другие дочерние элементы из политики, чтобы сделать ее более читабельной.

Этот элемент имеет следующие атрибуты, общие для всех политик:

Атрибут По умолчанию Необходимый? Описание
name Н/Д Необходимый

Внутреннее имя политики. Значение атрибута name может содержать буквы, цифры, пробелы, дефисы, символы подчеркивания и точки. Это значение не может превышать 255 символов.

При необходимости используйте элемент <DisplayName> , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

continueOnError ЛОЖЬ Необязательный Установите значение «false», чтобы возвращать ошибку при сбое политики. Это ожидаемое поведение для большинства политик. Установите значение «true», чтобы выполнение потока продолжалось даже после сбоя политики.
enabled истинный Необязательный Установите значение «true», чтобы применить политику. Установите значение «false», чтобы «отключить» политику. Политика не будет применяться, даже если она остается присоединенной к потоку.
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 указан как «ответ», эта политика изменяет объект ответа, возвращаемый целевым сервером.

Заголовок HTTP, добавленный к ответному сообщению этой политикой, извлекается из переменной, заполненной политикой LookupCache . Поэтому ответное сообщение, измененное этой политикой назначения сообщения, содержит заголовок HTTP, который указывает, были ли результаты извлечены из кэша или нет. Установка заголовков в ответе может быть полезна для отладки и устранения неполадок.

4. Установите динамический контент

Вы можете использовать Assign Message для встраивания динамического контента в полезные данные ответов и сообщений запроса.

Чтобы внедрить переменные потока Edge в полезные данные 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>

Полный список переменных потока см. в разделе Справочник по переменным потока .

Начиная с версии Cloud 16.08.17, для вставки переменных можно также использовать фигурные скобки.

5. Удалить параметр запроса

В следующем примере из запроса удаляется параметр запроса apikey :

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

Рекомендуется удалять параметр запроса apikey из сообщения запроса, когда вы используете политику VerifyAPIKey для аутентификации пользователя. Это делается для предотвращения передачи конфиденциальной ключевой информации серверной цели.

6: Установить/получить переменные

В следующем примере используются три политики назначения сообщений:

  1. Создает в запросе три переменные потока со статическими значениями.
  2. Динамически получает переменные потока во второй политике в потоке запросов.
  3. Устанавливает их в полезные данные ответа
<!-- 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> для добавления переменных в ответ. В следующем примере создаются полезные данные XML в ответе, который Edge возвращает клиенту:
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>
    

    Обратите внимание, что синтаксис доступа к переменным потока в <Set> заключается в заключении их в фигурные скобки.

    Обязательно установите для атрибута contentType элемента <Payload> значение «application/xml».

  4. Отправьте запрос на ваш API-прокси; например:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    При желании вы можете передать результаты через такую ​​утилиту, как xmllint , чтобы XML отображался в красиво отформатированной структуре:

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

    Тело ответа должно выглядеть следующим образом:

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

7. Получение заголовков ответа на вызов службы

В следующем примере предположим, что политика ServiceCallout находится в запросе прокси-сервера 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> .

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Сложный тип
Родительский элемент <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> )

Добавляет новые параметры формы в сообщение запроса. Этот элемент не влияет на ответное сообщение.

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Массив элементов <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

В следующем примере получается значение параметра строки запроса name и добавляется к запросу в качестве параметра формы:

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

Обратите внимание, что в этом примере не указана цель с помощью <AssignTo> . Эта политика добавляет параметр только в запрос.

Пример 3

В следующем примере к запросу добавляется несколько параметров формы:

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

В этом примере параметры строки запроса получаются из исходного запроса и добавляются в качестве параметров формы в запрос, отправленный в целевую конечную точку.

Вы можете использовать инструмент «Трассировка» , чтобы просмотреть поток. Вы увидите, что тело запроса содержит данные формы в URL-кодировке, которые изначально были переданы в качестве параметров строки запроса:

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

Вы можете использовать <FormParams> только при соблюдении следующих критериев:

  • HTTP-глагол: POST
  • Тип сообщения: Запрос
  • Одно (или оба) из следующего:
    • Данные формы: задано какое-либо значение или "" (пустая строка). Например, с помощью curl добавьте к вашему запросу -d "" .
    • Заголовок Content-Length : установлен в 0 (если в исходном запросе нет данных; в противном случае — текущая длина в байтах). Например, с помощью curl добавьте к вашему запросу -H "Content-Length: 0" .

Например:

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

Когда вы добавляете <FormParams> , Edge устанавливает заголовок Content-Type запроса в «application/x-www-form-urlencoded» перед отправкой сообщения целевой службе.

<Headers> (дочерний элемент <Add> )

Добавляет новые заголовки к указанному запросу или ответу, указанному элементом <AssignTo> .

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Массив элементов <Header>
Родительский элемент <Add>
Дочерние элементы <Header>

Элемент <Headers> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере к сообщению запроса добавляется заголовок user-agent и этому заголовку присваивается значение переменной потока request.user.agent .

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

<QueryParams> (дочерний элемент <Add> )

Добавляет в запрос новые параметры запроса. Этот элемент не влияет на ответ.

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Массив элементов <QueryParam>
Родительский элемент <Add>
Дочерние элементы <QueryParam>

Элемент <QueryParams> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере к запросу добавляется параметр запроса «myParam» и присваивается ему значение «42».

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

Вы можете использовать <QueryParams> только при соблюдении следующих критериев:

  • HTTP-глагол: GET
  • Тип сообщения: Запрос

Кроме того, вы можете устанавливать параметры запроса только в том случае, если атрибут type элемента <AssignTo> является сообщением запроса. Установка их в ответе не имеет никакого эффекта.

Если вы определяете в своей политике пустой массив параметров запроса ( <Add><QueryParams/></Add> ), политика не добавляет никаких параметров запроса. Это то же самое, что пропустить <QueryParams> .

<AssignTo>

Определяет, с каким объектом работает политика AssignMessage. Возможные варианты:

  • Сообщение запроса: request полученный прокси-сервером API.
  • Ответное сообщение: response возвращенный с целевого сервера.
  • Пользовательское сообщение: пользовательский объект запроса или ответа.

Обратите внимание, что в некоторых случаях вы не можете изменить объект, на который действует политика AssignMessage. Например, вы не можете использовать <Add> или <Set> для добавления или изменения параметров запроса ( <QueryParams> ) или параметров формы ( <FormParams> ) в ответе. Вы можете манипулировать только параметрами запроса и параметрами формы по запросу.

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Нить
Родительский элемент <AssignMessage>
Дочерние элементы Никто

Если вы не укажете <AssignTo> , политика будет действовать по запросу или ответу по умолчанию, который зависит от того, где выполняется политика. Если политика выполняется в потоке запросов, она влияет на сообщение запроса. Если она выполняется в потоке ответов, политика по умолчанию влияет на ответ.

Элемент <AssignTo> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере указывается, что целью является исходный запрос, который будет отправлен в целевую конечную точку:

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

Если для параметра createNew установлено значение «false» (по умолчанию), в этом примере новый запрос не создается. Все операции в этой политике влияют на исходный запрос.

Пример 2

В следующем примере создается новый объект запроса:

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

Когда вы создаете новый объект запроса или ответа, другие элементы политики политики AssignMessage (такие как <Add> , <Set> и <Set> ) действуют на этот новый объект запроса.

Вы можете получить доступ к новому объекту запроса в других политиках позже в потоке или отправить новый объект запроса во внешнюю службу с помощью политики ServiceCallout .

Пример 3

В следующем примере создается новый объект запроса с именем «MyRequestObject»:

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

Когда вы создаете новый объект запроса или ответа, другие элементы политики политики AssignMessage (такие как <Add> , <Set> и <Set> ) действуют на этот новый объект запроса.

Вы можете получить доступ к новому объекту запроса в других политиках позже в потоке или отправить новый объект запроса во внешнюю службу с помощью политики ServiceCallout .

В следующей таблице описаны атрибуты <AssignTo> :

Атрибут Описание Необходимый? Тип
createNew

Определяет, создает ли эта политика новое сообщение при назначении значений.

Если «истина», то политика создает новую переменную типа, указанного type (либо «запрос», либо «ответ»). Если вы не укажете имя новой переменной, политика создаст новый объект запроса или ответа на основе значения type .

Если «false», политика реагирует одним из двух способов:

  • Если <AssignTo> может разрешить имя переменной в запрос или ответ, обработка продолжается. Например, если политика находится в потоке запросов, переменная является объектом запроса. Если политика находится в ответе, переменная является объектом ответа.
  • Если <AssignTo> не может быть разрешено или разрешается в тип, не являющийся сообщением, политика выдает ошибку.

Если createNew не указан, политика реагирует одним из двух способов:

  • Если <AssignTo> разрешается в сообщение, обработка переходит к следующему шагу.
  • Если <AssignTo> не может быть разрешено или разрешается в тип, не являющийся сообщением, создается новая переменная типа, указанного в type .
Необязательный логическое значение
transport

Указывает тип транспорта для типа сообщения запроса или ответа.

Значением по умолчанию является «http» (единственное поддерживаемое значение).

Необязательный Нить
type Указывает тип нового сообщения, если createNew имеет значение true. Допустимые значения: «запрос» или «ответ».

Значение по умолчанию — «запрос». Если вы опустите этот атрибут, Edge создаст либо запрос, либо ответ, в зависимости от того, в каком месте потока выполняется эта политика.

Необязательный Нить

<AssignVariable>

Присваивает значение переменной потока назначения (например, переменной, значение которой установлено политикой AssignMessage). Если переменная потока не существует, то <AssignVariable> создает ее.

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Сложный тип
Родительский элемент <AssignMessage>
Дочерние элементы <Name> (обязательно)
<Ref>
<Template>
<Value>

Значение, которое вы присваиваете переменной потока назначения, может быть одним из следующих:

  • Литеральная строка: используйте дочерний элемент <Value> , чтобы указать буквальное строковое значение для переменной потока назначения.
  • Переменная потока: используйте дочерний элемент <Ref> , чтобы указать значение существующей переменной потока для целевой переменной потока. Полный список переменных потока, которые можно использовать в качестве источника, см. в разделе Справочник по переменным потока .
  • Шаблон сообщения: используйте дочерний элемент <Template> , чтобы указать шаблон сообщения для переменной потока назначения.

Элемент <AssignVariable> использует следующий синтаксис:

Синтаксис

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

Используйте элемент <Ref> , чтобы указать исходную переменную. Если переменная, на которую ссылается <Ref> недоступна, Edge использует значение, указанное элементом <Value> . Если вы определяете <Template> , он имеет приоритет над другими дочерними элементами.

Пример 1

В следующем примере значению новой переменной myvar присваивается буквальное значение «42»:

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

Пример 2

В следующем примере значение переменной потока request.header.user-agent присваивается переменной потока назначения myvar , а значение параметра запроса country — переменной потока назначения Country :

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

Если какое-либо назначение завершается неудачей, Edge вместо этого присваивает значение «ErrorOnCopy» переменной потока назначения.

Если переменные потока myvar или Country не существуют, <AssignVariable> создает их.

Пример 3

В следующем примере дочерний элемент <Template> используется для объединения двух контекстных переменных с помощью буквальной строки (дефиса) между ними:

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

Обычно <AssignVariable> используется для установки значения по умолчанию для параметра запроса, заголовка или другого значения, которое может быть передано вместе с запросом. Это можно сделать с помощью комбинации дочерних элементов <Ref> и <Value> . Для получения дополнительной информации см. примеры для <Ref> .

<Name> (дочерний элемент <AssignVariable> )

Указывает имя переменной потока назначения (например, переменной, значение которой установлено политикой AssignMessage). Если переменная, указанная в <AssignVariable> , не существует, политика создает переменную с таким именем.

Значение по умолчанию н/д
Необходимый? Необходимый
Тип Нить
Родительский элемент <AssignVariable>
Дочерние элементы Никто

Элемент <Name> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере переменная назначения указывается как myvar и ей присваивается буквальное значение «42»:

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

Если myvar не существует, <AssignVariable> создает его.

<Ref> (дочерний элемент <AssignVariable> )

Указывает источник назначения как переменную потока. Переменная потока может быть одной из предварительно определенных переменных потока (как указано в справочнике по переменным потока ) или созданной вами пользовательской переменной потока.

Значение <Ref> всегда интерпретируется как переменная потока; вы не можете указать буквальную строку в качестве значения. Чтобы присвоить буквальное строковое значение, используйте вместо этого элемент <Value> .

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Нить
Родительский элемент <AssignVariable>
Дочерние элементы Никто

Когда вы указываете переменную потока с помощью <Ref> , опустите закрывающие скобки «{}», которые вы обычно используете для ссылки на переменную потока. Например, чтобы установить значение новой переменной в значение переменной потока client.host :

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

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

Чтобы определить значение по умолчанию для переменной потока назначения, используйте <Value> в сочетании с <Ref> . Если переменная потока, указанная в <Ref> , не существует, не может быть прочитана или имеет значение NULL, то вместо этого Edge присваивает значение <Value> целевой переменной потока.

Элемент <Ref> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере значение переменной потока request.header.user-agent присваивается переменной потока назначения myvar , а значение параметра запроса country переменной Country :

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

В этом примере Edge не имеет значения по умолчанию (или резервного значения), указанного ни для одного назначения.

Пример 2

В следующем примере значение переменной потока request.header.user-agent присваивается переменной потока назначения myvar , а значение параметра запроса country переменной Country :

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

В этом примере, если значения переменной потока request.header.user-agent или параметра запроса Country имеют значение NULL, нечитабельны или имеют неверный формат, 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 и присваивает его себе. Если переменная потока имеет значение NULL, то есть параметр запроса «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'/>

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Нить
Родительский элемент <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

В следующем примере указывается переменная потока и текстовое значение. В этом случае, если переменная, на которую ссылаются, не равна нулю, это значение используется в качестве шаблона. Если указанное значение равно нулю, то в качестве шаблона используется текстовое значение (в данном случае {system.uuid}-{messageid} ). Этот шаблон полезен для предоставления значения «переопределения», когда в некоторых случаях вы хотите переопределить шаблон по умолчанию (текстовую часть) значениями, которые задаются динамически. Например, условный оператор может получить значение из карты ключ-значение и установить это значение для ссылочной переменной:

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

<Value> (дочерний элемент <AssignVariable> )

Определяет значение переменной потока назначения, установленной с помощью <AssignVariable> . Значение всегда интерпретируется как литеральная строка; вы не можете использовать переменную потока в качестве значения, даже если заключить значение в квадратные скобки ("{}"). Чтобы использовать переменную потока, используйте вместо нее <Ref> .

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Нить
Родительский элемент <AssignVariable>
Дочерние элементы Никто

При использовании в сочетании с элементом <Ref> <Value> действует как значение по умолчанию (или резервное значение). Если <Ref> не указан, неразрешим или имеет значение NULL, используется значение <Value> .

Элемент <Value> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере для переменной целевого потока myvar задается буквальное значение «42»:

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

Пример 2

В следующем примере значение переменной потока request.header.user-agent присваивается переменной потока myvar , а значение параметра запроса country переменной Country :

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

Если какое-либо назначение завершается неудачей, <AssignVariable> вместо этого присваивает значение «ErrorOnCopy» переменной потока назначения.

<Copy>

Копирует значения из сообщения, указанного атрибутом source , в сообщение, указанное элементом <AssignTo> . Если вы не укажете цель с помощью <AssignTo> , эта политика копирует значения в запрос или ответ, в зависимости от того, в каком месте потока выполняется эта политика.

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Нить
Родительский элемент <AssignMessage>
Дочерние элементы <FormParams>
<Headers>
<Path>
<Payload>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

Элемент <Copy> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере копируется заголовок, три параметра формы, путь и все параметры запроса из запроса в новый настраиваемый запрос:

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

Элемент <Copy> имеет следующие атрибуты:

Атрибут Описание Необходимый? Тип
источник

Указывает исходный объект копии.

  • Если source не указан, он рассматривается как простое сообщение. Например, если политика находится в потоке запросов, то источником по умолчанию является объект request . Если политика находится в потоке ответов, по умолчанию она использует объект response . Если вы опустите source , вы можете использовать абсолютную ссылку на переменную потока в качестве источника копии. Например, укажите значение {request.header.user-agent} .
  • Если исходная переменная не может быть разрешена или преобразуется в тип, не являющийся сообщением, <Copy> не отвечает.
Необязательный Нить

<FormParams> (дочерний элемент <Copy> )

Копирует параметры формы из запроса, указанного атрибутом source элемента <Copy> , в запрос, указанный элементом <AssignTo> . Этот элемент не влияет на ответ.

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Массив элементов <FormParam> или пустой массив.
Родительский элемент <Copy>
Дочерние элементы <FormParam>

Элемент <FormParams> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере один параметр формы копируется из запроса в пользовательский запрос MyCustomRequest:

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

Пример 2

В следующем примере все параметры формы копируются в пользовательский запрос 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> .

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Массив элементов <Header> или пустой массив.
Родительский элемент <Copy>
Дочерние элементы <Header>

Элемент <Headers> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере заголовок user-agent копируется из запроса в новый настраиваемый объект запроса:

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

Пример 2

Чтобы скопировать все заголовки, используйте пустой элемент <Headers> , как показано в следующем примере:

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

Пример 3

Если существует несколько заголовков с одинаковым именем, используйте следующий синтаксис:

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

В этом примере копируются «h1», «h2» и второе значение «h3». Если «h3» имеет только одно значение, оно не копируется.

<Path> (дочерний элемент <Copy> )

Определяет, следует ли копировать путь из исходного запроса в целевой запрос. Этот элемент не влияет на ответ.

Если установлено значение «true», эта политика копирует путь из сообщения запроса, указанного source атрибутом элемента <Copy> , в сообщение запроса, указанное элементом <AssignTo> .

Значение по умолчанию ЛОЖЬ
Необходимый? Необязательный
Тип логическое значение
Родительский элемент <Copy>
Дочерние элементы Никто

Элемент <Path> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере показано, что политика AssignMessage должна скопировать путь из исходного запроса в новый настраиваемый объект запроса:

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

Вы можете использовать <Path> только при соблюдении следующих критериев:

  • Тип сообщения: Запрос

<Payload> (дочерний элемент <Copy> )

Определяет, следует ли копировать полезные данные из источника в пункт назначения. Источником и местом назначения могут быть запросы или ответы.

Если установлено значение «true», эта политика копирует полезные данные из сообщения, указанного 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», чтобы полезные данные запроса копировались из запроса в ответ:

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

<QueryParams> (дочерний элемент <Copy> )

Копирует параметры строки запроса из запроса, указанного source атрибутом элемента <Copy> , в запрос, указанный элементом <AssignTo> . Этот элемент не влияет на ответ.

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Массив элементов <QueryParam> или пустой массив.
Родительский элемент <QueryParam>
Дочерние элементы Никто

Элемент <QueryParams> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере параметр запроса «my_param» копируется из запроса в новый пользовательский объект запроса:

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

Пример 2

В следующем примере все параметры запроса копируются из запроса в новый пользовательский объект запроса:

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

Пример 3

Если существует несколько параметров запроса с одним и тем же именем, используйте следующий синтаксис:

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

В этом примере копируются «qp1», «qp2» и второе значение «qp3». Если «qp3» имеет только одно значение, оно не копируется.

Вы можете использовать <QueryParams> только при соблюдении следующих критериев:

  • HTTP-глагол: GET
  • Тип сообщения: Запрос

<ReasonPhrase> (дочерний элемент <Copy> )

Определяет, следует ли копировать фразу причины из исходного ответа в целевой ответ. Этот элемент не влияет на запрос.

Если установлено значение «true», эта политика копирует ReasonPhrase из ответа, указанного source атрибутом элемента <Copy> , в ответ, указанный элементом <AssignTo> .

Значение по умолчанию ЛОЖЬ
Необходимый? Необязательный
Тип логическое значение
Родительский элемент <Copy>
Дочерние элементы Никто

Элемент <ReasonPhrase> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере для <ReasonPhrase> устанавливается значение «true», что заставляет <Copy> копировать фразу причины из ответа по умолчанию в пользовательский объект ответа:

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

Вы можете использовать <ReasonPhrase> только при соблюдении следующих критериев:

  • Тип сообщения: Ответ

<StatusCode> (дочерний элемент <Copy> )

Определяет, копируется ли код состояния из ответа источника в ответ назначения. Этот элемент не влияет на запрос.

Если установлено значение «true», эта политика копирует код состояния из ответного сообщения, указанного source атрибутом элемента <Copy> , в ответное сообщение, указанное элементом <AssignTo> .

Значение по умолчанию ЛОЖЬ
Необходимый? Необязательный
Тип логическое значение
Родительский элемент <Copy>
Дочерние элементы Никто

Элемент <StatusCode> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере для <StatusCode> устанавливается значение «true», что копирует код состояния из объекта ответа по умолчанию в новый настраиваемый объект ответа:

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

Вы можете использовать <StatusCode> только при соблюдении следующих критериев:

  • Тип сообщения: Ответ

Обычно <StatusCode> используется для обеспечения того, чтобы ответ прокси-сервера имел тот же статус, что и ответ, полученный от цели, когда для атрибута createNew <AssignTo> установлено значение «true».

<Verb> (дочерний элемент <Copy> )

Определяет, копируется ли команда HTTP из исходного запроса в целевой запрос. Этот элемент не влияет на ответ.

Если установлено значение «true», команда, найденная в source атрибуте элемента <Copy> , копируется в запрос, указанный в элементе <AssignTo> .

Значение по умолчанию ЛОЖЬ
Необходимый? Необязательный
Тип логическое значение
Родительский элемент <Copy>
Дочерние элементы Никто

Элемент <Verb> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере для <Verb> устанавливается значение «true», что копирует глагол из запроса по умолчанию в новый, пользовательский запрос:

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

Вы можете использовать <Verb> только при соблюдении следующих критериев:

  • Тип сообщения: Запрос

<Version> (дочерний элемент <Copy> )

Определяет, копируется ли версия HTTP из исходного запроса в целевой запрос. Этот элемент не влияет на ответ.

Если установлено значение «true», копируется версия HTTP, найденная в source атрибуте элемента <Copy> , в объект, указанный элементом <AssignTo> .

Значение по умолчанию ЛОЖЬ
Необходимый? Необязательный
Тип логическое значение
Родительский элемент <Copy>
Дочерние элементы Никто

Элемент <Version> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере для <Version> устанавливается значение «true» в запросе, который копирует версию из объекта запроса по умолчанию в новый, настраиваемый объект запроса:

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

Вы можете использовать <Version> только при соблюдении следующих критериев:

  • Тип сообщения: Запрос

<DisplayName>

Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим, более естественным именем.

Элемент <DisplayName> является общим для всех политик.

Значение по умолчанию н/д
Необходимый? Необязательный. Если вы опустите <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> значения true отличается от установки continueOnError <AssignMessage> значения true тем, что она специфична для установки и получения значений переменных. Если вы установите, continueOnError до true , то Edge игнорирует все ошибки, а не только ошибки, возникающие при использовании переменных.

В элементе <IgnoreUnresolvedVariables> используется следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере наборы <IgnoreUnresolvedVariables> к «true»:

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

<Remove>

Удаляет заголовки, параметры запроса, параметры формы и/или полезную нагрузку сообщения из сообщения. Сообщение может быть запросом или ответом. Вы указываете, какое сообщение <Remove> действует, используя элемент <AssignTo> .

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Комплексный тип
Родительский элемент <AssignMessage>
Дочерние элементы <FormParams>
<Headers>
<Payload>
<QueryParams>

Общий вариант использования для <Remove> - удалить параметр запроса, который содержит конфиденциальную информацию из входящего объекта запроса, чтобы избежать передачи его на бэкэнд -сервер.

В элементе <Remove> используется следующий синтаксис:

Синтаксис

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

Пример 1

Следующий пример удаляет тело сообщения из ответа:

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

В потоке ответов эта политика удаляет тело ответа, возвращая только заголовки HTTP клиенту.

Пример 2

Следующий пример удаляет все параметры формы и параметр запроса из входящего запроса:

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

<FormParams> (ребенок <Remove> >)

Удаляет указанные параметры формы из запроса. Этот элемент не влияет на ответ.

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Массив элементов <FormParam> или пустого массива
Родительский элемент <Remove>
Дочерние элементы <FormParam>

Элемент <FormParams> использует следующий синтаксис:

Синтаксис

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

Пример 1

Следующий пример удаляет три параметра формы из запроса:

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

Пример 2

Следующий пример удаляет все параметры формы из запроса:

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

Пример 3

Если есть несколько параметров формы с одинаковым именем, используйте следующий синтаксис:

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

Этот пример удаляет «F1», «F2» и второе значение «F3». Если «F3» имеет только одно значение, то это не удалено.

Вы можете использовать <FormParams> только при выполнении следующих критериев:

  • Тип сообщения: запрос
  • Content-Type : «Приложение/X-WWW-Form-Urlencoded»

<Headers> (ребенок <Remove> )

Удаляет указанные заголовки HTTP из запроса или ответа, который указан элементом <AssignTo> .

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Массив элементов <Header> или пустого массива
Родительский элемент <Remove>
Дочерние элементы <Header>

Элемент <Headers> использует следующий синтаксис:

Синтаксис

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

Пример 1

Следующий пример удаляет заголовок user-agent из запроса:

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

Пример 2

Следующий пример удаляет все заголовки из запроса:

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

Пример 3

Если есть несколько заголовков с одинаковым именем, используйте следующий синтаксис:

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

Этот пример удаляет «H1», «H2» и второе значение «H3» из запроса. Если «H3» имеет только одно значение, то он не удален.

<Payload> (ребенок <Remove> >)

Определяет, удаляет ли <Remove> полезную нагрузку в запросе или ответе, который указан элементом <AssignTo> . Установить на «true», чтобы очистить полезную нагрузку; в противном случае «ложь». Значение по умолчанию - «false».

Значение по умолчанию ЛОЖЬ
Необходимый? Необязательный
Тип логическое значение
Родительский элемент <Remove>
Дочерние элементы Никто

Элемент <Payload> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере настройки <Payload> на «true», чтобы очистить полезную нагрузку запроса:

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

<QueryParams> (ребенок <Remove> )

Удаляет указанные параметры запроса из запроса. Этот элемент не влияет на ответ.

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Массив элементов <QueryParam> или пустого массива
Родительский элемент <Remove>
Дочерние элементы <QueryParam>

Элемент <QueryParams> использует следующий синтаксис:

Синтаксис

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

Пример 1

Следующий пример удаляет один параметр запроса из запроса:

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

Пример 2

Следующий пример удаляет все параметры запроса из запроса:

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

Пример 3

Если есть несколько параметров запросов с одним и тем же именем, используйте следующий синтаксис:

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

Этот пример удаляет «qp1», «qp2» и второе значение «qp3» из запроса. Если «QP3» имеет только одно значение, то он не удален.

Пример 4

Следующий пример удаляет параметр запроса apikey из запроса:

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

Вы можете использовать <QueryParams> только при выполнении следующих критериев:

  • Http глагол: получить
  • Тип сообщения: запрос

<Set>

Устанавливает информацию в сообщении запроса или ответа, которое указано элементом <AssignTo> . <Set> перезаписывает заголовки или параметры, которые уже существуют в исходном сообщении. Чтобы создать новый заголовок или параметр, вместо этого используйте элемент <Add> .

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Комплексный тип
Родительский элемент <AssignMessage>
Дочерние элементы <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

Элемент <Set> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере показан элемент <Set> :

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

<FormParams> (ребенок <Set> )

Перезаписывает существующие параметры формы по запросу и заменяет их новыми значениями, которые вы указываете с этим элементом. Этот элемент не влияет на ответ.

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Массив <FormParam> элементы
Родительский элемент <Set>
Дочерние элементы <FormParam>

Элемент <FormParams> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере устанавливает параметр формы, называемый «myParam» для значения request.header.myparam переменной в новом, пользовательском запросе:

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

Вы можете использовать <FormParams> только при выполнении следующих критериев:

  • Http глагол: post
  • Тип сообщения: запрос

Если вы определяете параметры пустой формы в своей политике ( <Add><FormParams/></Add> ), политика не добавляет каких -либо параметров формы. Это то же самое, что пропустить <FormParams> .

<Set> изменяет Content-Type сообщения на «Application/XWW-Form-UrlencoDed», прежде чем отправлять его в целевую конечную точку.

<Headers> (ребенок <Set> )

Перезаписывает существующие заголовки HTTP в запросе или ответе, который указан элементом <AssignTo> .

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Массив <Header> элементы
Родительский элемент <Set>
Дочерние элементы <Header>

Элемент <Headers> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере устанавливает заголовок user-agent в значение переменной request.header.user-agent :

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

Если вы определяете пустые заголовки в своей политике ( <Add><Headers/></Add> ), политика не добавляет никаких заголовков. Это то же самое, что пропустить <Headers> .

<Path> (ребенок <Set> )

<Payload> (ребенок <Set> )

Определяет тело сообщения для запроса или ответа, который определяется элементом <AssignTo> . Полезной нагрузкой может быть любой действительный тип контента, такой как простой текст, 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> рассматривается как шаблон сообщения. Это означает, что политика назначения заменяет переменные, завернутые в кудрявые скобки со значением ссылочных переменных во время выполнения.

В следующем примере используется синтаксис Curly 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 При желании указывается ведущий разделитель на переменной потока. По умолчанию "{". Для получения дополнительной информации см. Ссылку переменных потока . Необязательный Чар
variableSuffix При желании указывается затяжной разделитель на переменной потока. По умолчанию «}». Для получения дополнительной информации см. Ссылку переменных потока . Необязательный Чар

<QueryParams> (ребенок <Set> )

Перезаписывает существующие параметры запроса в запросе с новыми значениями. Этот элемент не влияет на ответ.

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Массив <QueryParam> элементы
Родительский элемент <Set>
Дочерние элементы <QueryParam>

Элемент <QueryParams> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере устанавливает параметр запроса «адрес» для значения request.header.address переменная:

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

Вы можете использовать <QueryParams> только при выполнении следующих критериев:

  • Http глагол: получить
  • Тип сообщения: запрос

Если вы определяете пустые параметры запроса в своей политике ( <Set><QueryParams/></Set> ), политика не устанавливает каких -либо параметров запроса. Это то же самое, что пропущено <QueryParams> .

<ReasonPhrase> (ребенок <Set> )

Устанавливает причина фразу в ответ. Обычно это делается для отладки в сочетании с <StatusCode> . Этот элемент не влияет на запрос.

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Нить
Родительский элемент <Set>
Дочерние элементы Никто

Элемент <ReasonPhrase> использует следующий синтаксис:

Синтаксис

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

Пример 1

Следующий пример определяет простую причину фразу:

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

Пример 2

Содержание <ReasonPhrase> рассматривается как шаблон сообщения. Это означает, что имя переменной, обернутое в кудрявые скобки, будет заменено во время выполнения со значением указанной переменной, как показано в следующем примере:

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

Вы можете использовать <ReasonPhrase> только при выполнении следующих критериев:

  • Тип сообщения: ответ

<StatusCode> (ребенок <Set> )

Устанавливает код состояния в ответе. Этот элемент не влияет на запрос.

Значение по умолчанию '200' (когда атрибут createNew <AssignTo> установлен на «true»)
Необходимый? Необязательный
Тип Строка или variable
Родительский элемент <Set>
Дочерние элементы Никто

Элемент <StatusCode> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере устанавливает простой код состояния:

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

Пример 2

Содержание <StatusCode> рассматривается как шаблон сообщения. Это означает, что имя переменной, обертанное в кудрявые скобки, будет заменено во время выполнения со значением указанной переменной, как показано в следующем примере:

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

Вы можете использовать <StatusCode> только при выполнении следующих критериев:

  • Тип сообщения: ответ

<Verb> (ребенок <Set> )

Устанавливает глагол HTTP по запросу. Этот элемент не влияет на ответ.

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Строка или variable
Родительский элемент <Set>
Дочерние элементы Никто

Элемент <Verb> использует следующий синтаксис:

Синтаксис

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

Пример 1

В следующем примере устанавливает простой глагол по запросу:

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

Пример 2

Содержание <Verb> рассматривается как шаблон сообщения. Это означает, что имя переменной, обертанное в кудрявые скобки, будет заменено во время выполнения со значением указанной переменной.

В следующем примере используется переменная для заполнения глагола:

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

Вы можете использовать <Verb> только при выполнении следующих критериев:

  • Тип сообщения: запрос

<Version> (ребенок <Set> )

Устанавливает HTTP -версию по запросу. Этот элемент не влияет на ответ.

Значение по умолчанию н/д
Необходимый? Необязательный
Тип Строка или variable
Родительский элемент <Set>
Дочерние элементы Никто

Элемент <Version> использует следующий синтаксис:

Синтаксис

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

Пример 1

Следующий пример устанавливает номер версии на «1.1»:

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

Пример 2

Следующее использует переменную в кудрявых брекетах, чтобы установить номер версии:

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

Содержание <Version> рассматривается как шаблон сообщения. Это означает, что имя переменной, обертанное в кудрявые скобки, будет заменено во время выполнения со значением указанной переменной.

Вы можете использовать <Version> только при выполнении следующих критериев:

  • Тип сообщения: запрос

Следующий пример создает пользовательский объект запроса с помощью сообщения назначения:

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

Этот пример:

  • Создает новый объект сообщения запроса под названием «MyCustomRequest».
  • На MyCustomRequest, эта политика:
    • Копирует значение заголовка HTTP user-agent из входящего запроса в новое сообщение. Поскольку <Copy> использует абсолютную ссылку на переменную потока user-agent , нет необходимости указывать атрибут source на <Copy> .
    • Устанавливает параметр address на пользовательском сообщении значению параметра addy запроса входящего запроса.
    • Устанавливает глагол HTTP, чтобы GET .
  • Наборы <IgnoreUnresolvedVariables> к «false». Когда <IgnoreUnresolvedVariables> является «false», если одна из переменных, которые пытается добавить, не существует, Edge прекратит обработку в потоке API.