Вы просматриваете документацию 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 | Н/Д | Необходимый | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент |
continueOnError | ЛОЖЬ | Необязательный | Установите значение «false», чтобы возвращать ошибку при сбое политики. Это ожидаемое поведение для большинства политик. Установите значение «true», чтобы выполнение потока продолжалось даже после сбоя политики. |
enabled | истинный | Необязательный | Установите значение «true», чтобы применить политику. Установите значение «false», чтобы «отключить» политику. Политика не будет применяться, даже если она остается присоединенной к потоку. |
async | ЛОЖЬ | Устаревший | Этот атрибут устарел. |
В следующей таблице представлено высокоуровневое описание дочерних элементов <AssignMessage>
:
Дочерний элемент | Необходимый? | Описание |
---|---|---|
Общие операции | ||
<Add> | Необязательный | Добавляет информацию в объект сообщения, указанный элементом <AssignTo> . |
<Copy> | Необязательный | Копирует информацию из сообщения, указанного атрибутом source , в объект сообщения, указанный элементом <AssignTo> . |
<Remove> | Необязательный | Удаляет указанные элементы из переменной сообщения, указанной в элементе <AssignTo> . |
<Set> | Необязательный | Заменяет значения существующих свойств запроса или ответа, заданного элементом <AssignTo> . |
Другие дочерние элементы | ||
<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: Установить/получить переменные
В следующем примере используются три политики назначения сообщений:
- Создает в запросе три переменные потока со статическими значениями.
- Динамически получает переменные потока во второй политике в потоке запросов.
- Устанавливает их в полезные данные ответа
<!-- 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 и №2 в поток запросов. Обязательно укажите политику № 1 перед политикой № 2.
- Добавьте третью политику в поток ответов .
- Третья политика использует элемент
<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». - Отправьте запрос на ваш 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">MyRequestObject</AssignTo> </AssignMessage>
Когда вы создаете новый объект запроса или ответа, другие элементы политики политики AssignMessage (такие как <Add>
, <Set>
и <Set>
) действуют на этот новый объект запроса.
Вы можете получить доступ к новому объекту запроса в других политиках позже в потоке или отправить новый объект запроса во внешнюю службу с помощью политики ServiceCallout .
В следующей таблице описаны атрибуты <AssignTo>
:
Атрибут | Описание | Необходимый? | Тип |
---|---|---|---|
createNew | Определяет, создает ли эта политика новое сообщение при назначении значений. Если «истина», то политика создает новую переменную типа, указанного Если «false», политика реагирует одним из двух способов:
Если
| Необязательный | логическое значение |
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>
имеет следующие атрибуты:
Атрибут | Описание | Необходимый? | Тип |
---|---|---|---|
источник | Указывает исходный объект копии.
| Необязательный | Нить |
<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 | Если указано, значение | Необязательный | Нить |
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
.
- Копирует значение заголовка HTTP
- Наборы
<IgnoreUnresolvedVariables>
к «false». Когда<IgnoreUnresolvedVariables>
является «false», если одна из переменных, которые пытается добавить, не существует, Edge прекратит обработку в потоке API.
Пример 2
Вот еще один пример, демонстрирующий, как создать пользовательский объект запроса с помощью сообщения о назначении:
<AssignMessage name="AssignMessage-2"> <AssignTo createNew="true" type="request">partner.request</AssignTo> <Set> <Verb>POST</Verb> <Payload contentType="text/xml"> <request><operation>105</operation></request> </Payload> </Set> </AssignMessage>
Этот пример создает новый пользовательский запрос под названием «partner.request». Затем он устанавливает <Verb>
и <Payload>
в новом запросе.