Вы просматриваете документацию Apigee Edge .
Перейти к документации Apigee X. info
Что
Политика AssignMessage изменяет или создаёт новые сообщения запросов и ответов в потоке API-прокси. Политика позволяет выполнять следующие действия с этими сообщениями:
- Добавить новые параметры формы, заголовки или параметры запроса в сообщение
- Копировать существующие свойства из одного сообщения в другое
- Удалить заголовки, параметры запроса, параметры формы и/или полезную нагрузку сообщения из сообщения.
- Установить значение существующих свойств в сообщении
Политика AssignMessage обычно позволяет добавлять, изменять или удалять свойства запроса или ответа. Однако её также можно использовать для создания настраиваемого сообщения запроса или ответа и передачи его альтернативному целевому объекту, как описано в разделе Создание настраиваемых сообщений запроса .
Политика AssignMessage может создавать или изменять сообщения или переменные потока. Используйте эту политику для изменения сообщений-запросов перед их отправкой через прокси-сервер в вышестоящие системы или для изменения ответных сообщений перед их ретрансляцией в приложения-потребители API.
Элемент <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 name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
2: Удалить полезную нагрузку
В следующем примере полезная нагрузка удаляется из ответа с помощью элемента <Remove>
:
<AssignMessage name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </AssignMessage>
3: Изменить ответ
В следующем примере существующий объект ответа изменяется путем добавления к нему заголовка:
<AssignMessage name="AM-modify-response"> <Set> <Headers> <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false </IgnoreUnresolvedVariables> <AssignTo>response</AssignTo> </AssignMessage>
Этот пример не создаёт новое сообщение. Вместо этого он изменяет существующее ответное сообщение, добавляя HTTP-заголовок.
Поскольку в этом примере response
указан как имя переменной в элементе <AssignTo>
, эта политика изменяет объект response, который был изначально установлен с данными, возвращаемыми целевым сервером.
HTTP-заголовок, добавляемый к ответному сообщению этой политикой, извлекается из переменной, заполняемой политикой LookupCache . Поэтому ответное сообщение, изменённое этой политикой Assign Message, содержит HTTP-заголовок, указывающий, были ли результаты извлечены из кэша. Настройка заголовков в ответе может быть полезна для отладки и устранения неполадок.
4. Установите динамический контент
Вы можете использовать функцию Assign Message для встраивания динамического контента в полезную нагрузку сообщений-ответов и запросов.
Чтобы встроить переменные потока Edge в полезную нагрузку XML, заключите указанную переменную в фигурные скобки, например: {prefix.name}
.
В следующем примере значение переменной потока HTTP-заголовка user-agent
встраивается в элемент XML с именем User-agent
:
<AssignMessage name="AM-set-dynamic-content"> <AssignTo>response</AssignTo> <Set> <Payload contentType="text/xml"> <User-agent>{request.header.user-agent}</User-agent> </Payload> </Set> <IgnoreUnresolvedVariables>false </IgnoreUnresolvedVariables> </AssignMessage>
Для полезных данных JSON вы можете вставлять переменные, используя атрибуты variablePrefix
и variableSuffix
с символами-разделителями, как показано в следующем примере:
<AssignMessage name="set-payload"> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> { "user-agent": "@request.header.user-agent#" } </Payload> </AssignMessage>
Полный список переменных потока см. в Справочнике переменных потока .
Начиная с версии Cloud 16.08.17 для вставки переменных также можно использовать фигурные скобки.
5: Удалить параметр запроса
В следующем примере параметр запроса apikey
удаляется из запроса:
<AssignMessage name="AM-remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
При использовании политики VerifyAPIKey для аутентификации пользователя рекомендуется удалять параметр запроса apikey
из сообщения запроса. Это необходимо для предотвращения передачи конфиденциальной информации о ключе на серверную часть.
6: Установка/получение переменных
В следующем примере используются три политики назначения сообщений:
- Создает три переменные потока в запросе со статическими значениями
- Динамически получает переменные потока во второй политике в потоке запросов.
- Устанавливает их в полезной нагрузке ответа
<!-- Policy #1: Set variables in the request --> <AssignMessage name="AM-set-variables"> <!-- Create a variable named myAppSecret --> <AssignVariable> <Name>myAppSecret</Name> <Value>42</Value> </AssignVariable> <!-- Create a variable named config.environment --> <AssignVariable> <Name>config.environment</Name> <Value>test</Value> </AssignVariable> <!-- Create a variable named config.protocol --> <AssignVariable> <Name>config.protocol</Name> <Value>gopher</Value> </AssignVariable> </AssignMessage>
В первой политике элемент <AssignVariable>
создаёт и задаёт три переменные в запросе. Каждый элемент <Name>
задаёт имя переменной, а <Value>
— её значение.
Вторая политика использует элемент <AssignVariable>
для считывания значений и создает три новые переменные:
<!-- Policy #2: Get variables from the request --> <AssignMessage continueOnError="false" enabled="true" name="get-variables"> <AssignTo createNew="false" transport="http" type="request"/> <!-- Get the value of myAppSecret and create a new variable, secret --> <AssignVariable> <Name>secret</Name> <Ref>myAppSecret</Ref> <Value>0</Value> </AssignVariable> <!-- Get the value of config.environment and create a new variable, environment --> <AssignVariable> <Name>environment</Name> <Ref>config.environment</Ref> <Value>default</Value> </AssignVariable> <!-- Get the value of config.protocol and create a new variable, protocol --> <AssignVariable> <Name>protocol</Name> <Ref>config.protocol</Ref> <Value>default</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Во второй политике элемент <Ref>
ссылается на исходную переменную, а элементы <Name>
определяют имена новых переменных. Если переменная, на которую ссылается элемент <Ref>
, недоступна, можно использовать значение, указанное элементом <Value>
.
Чтобы опробовать этот набор политик:
- Добавьте политики №1 и №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
). Если предположить, что переменная ответа вызова службы — это значение по умолчанию calloutResponse
, следующая политика получает второе значение заголовка Set-Cookie
.
<AssignMessage name="AM-Payload-from-SC-header"> <Set> <Payload contentType="application/json"> {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"} </Payload> </Set> <IgnoreUnresolvedVariables>true </IgnoreUnresolvedVariables> <AssignTo>response</AssignTo> </AssignMessage>
Чтобы вывести список всех значений заголовков, используйте следующую переменную:
{calloutResponse.header.Set-Cookie.values}
Для каждого дочернего элемента в этом справочнике приведены дополнительные примеры. Ещё больше примеров можно найти в примере AssignMessage на GitHub.
Ссылка на дочерний элемент
В этом разделе описываются дочерние элементы <AssignMessage>
.
<Add>
Добавляет информацию к запросу или ответу, указанному элементом <AssignTo>
.
Элемент <Add>
добавляет к сообщению новые свойства, отсутствующие в исходном сообщении. Чтобы изменить значения существующих свойств, используйте элемент <Set>
.
Значение по умолчанию | н/д |
Необходимый? | Необязательный |
Тип | Сложный тип |
Родительский элемент | <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 name="AM-add-formparams-3"> <Add> <FormParams> <FormParam name="username">{request.queryparam.name}</FormParam> <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam> <FormParam name="default_language">{request.queryparam.lang}</FormParam> </FormParams> </Add> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Пример 2
В следующем примере элемент <Headers>
используется для добавления заголовка partner-id
к запросу, который будет отправлен в целевую конечную точку:
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Пример 3
В следующем примере элемент <QueryParams>
используется для добавления к запросу одного параметра запроса со статическим значением:
<AssignMessage name="AM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
В этом примере в префлоу запроса используется <Add>
. Если посмотреть на результаты в инструменте Trace , запрос к https://example-target.com/get
превратится в https://example-target.com/get?myParam=42
.
Дочерние элементы <Add>
поддерживают динамическую подстановку строк, известную как шаблонизация сообщений .
<FormParams>
(дочерний элемент <Add>
)
Добавляет новые параметры формы в сообщение-запрос. Этот элемент не влияет на сообщение-ответ.
Значение по умолчанию | н/д |
Необходимый? | Необязательный |
Тип | Массив элементов <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 name="AM-add-formparams-1"> <Add> <FormParams> <FormParam name="answer">42</FormParam> </FormParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Пример 2
В следующем примере получается значение параметра запроса name
и добавляется к запросу как параметр формы, а затем удаляется параметр запроса:
<AssignMessage name="AM-Swap-QueryParam-to-FormParams"> <Add> <FormParam name="name">{request.queryparam.name}</FormParam> </Add> <Remove> <QueryParam name="name"/> </Remove> </AssignMessage>
Обратите внимание, что в этом примере не указана цель с помощью <AssignTo>
. Эта политика добавляет параметр только к запросу.
Пример 3
В следующем примере к запросу добавляется несколько параметров формы:
<AssignMessage name="AM-add-formparams-3"> <Add> <FormParams> <FormParam name="username">{request.queryparam.name}</FormParam> <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam> <FormParam name="default_language">{request.queryparam.lang}</FormParam> </FormParams> </Add> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
В этом примере параметры строки запроса извлекаются из исходного запроса и добавляются как параметры формы с другими именами. Затем исходные параметры запроса удаляются. Apigee отправляет изменённый запрос в целевую конечную точку.
Вы можете использовать инструмент Trace для анализа потока. Вы увидите, что тело запроса содержит URL-кодированные данные формы, которые изначально были переданы в качестве параметров строки запроса:
username=nick&zip_code=90210&default_language=en
Использовать <FormParams>
можно только при соблюдении следующих критериев:
- HTTP-глагол: POST
- Тип сообщения: Запрос
- Одно (или оба) из следующих:
- Данные формы: укажите какое-либо значение или "" (пустую строку). Например, при использовании
curl
добавьте-d ""
к вашему запросу. - Заголовок
Content-Length
: установите значение 0 (если в исходном запросе нет данных; в противном случае — текущая длина в байтах). Например, с помощьюcurl
добавьте к запросу-H "Content-Length: 0"
.
- Данные формы: укажите какое-либо значение или "" (пустую строку). Например, при использовании
Например:
curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded" https://ahamilton-eval-test.apigee.net/am-test
При добавлении <FormParams>
Edge устанавливает заголовок Content-Type
запроса на «application/x-www-form-urlencoded» перед отправкой сообщения целевой службе.
<Headers>
(дочерний элемент <Add>
)
Добавляет новые заголовки к указанному запросу или ответу, который указан элементом <AssignTo>
.
Значение по умолчанию | н/д |
Необходимый? | Необязательный |
Тип | Массив элементов <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
В следующем примере к сообщению-запросу добавляется заголовок partner-id
, а этому заголовку присваивается значение переменной потока verifyapikey.VAK-1.developer.app.partner-id
.
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
<QueryParams>
(дочерний элемент <Add>
)
Добавляет новые параметры запроса к запросу. Этот элемент не влияет на ответ.
Значение по умолчанию | н/д |
Необходимый? | Необязательный |
Тип | Массив элементов <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 name="AM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Использовать <QueryParams>
можно только при соблюдении следующих критериев:
- HTTP-глагол: GET
- Тип сообщения: Запрос
Кроме того, параметры запроса можно задать только в том случае, если атрибут type
элемента <AssignTo>
представляет собой сообщение-запрос. Установка этих параметров в ответе не имеет никакого эффекта.
Если вы определяете пустой массив параметров запроса в своей политике ( <Add><QueryParams/></Add>
), политика не добавляет никаких параметров запроса. Это равносильно пропуску <QueryParams>
.
<AssignTo>
Определяет, к какому объекту применяется политика AssignMessage. Возможные варианты:
- Сообщение запроса:
request
, полученный API-прокси - Ответное сообщение:
response
, возвращенный целевым сервером. - Пользовательское сообщение: Пользовательский объект запроса или ответа.
Обратите внимание, что в некоторых случаях невозможно изменить объект, к которому применяется политика AssignMessage. Например, нельзя использовать <Add>
или <Set>
для добавления или изменения параметров запроса ( <QueryParams>
) или параметров формы ( <FormParams>
) в ответе. Изменять можно только параметры запроса и параметры формы в запросе.
Значение по умолчанию | н/д |
Необходимый? | Необязательный |
Тип | Нить |
Родительский элемент | <AssignMessage> |
Дочерние элементы | Никто |
Если элемент <AssignTo>
не указан или указан, но не указано текстовое значение элемента, политика применяется к запросу или ответу по умолчанию, в зависимости от того, где политика выполняется. Если политика выполняется в потоке запросов, она влияет <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"> <!-- DO NOT do this --> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Пример 2
В следующем примере создается новый объект запроса:
<AssignMessage name="AM-assignto-2"> <AssignTo createNew="true" transport="http" type="request">NameOfNewMessage</AssignTo> </AssignMessage>
При создании нового объекта запроса или ответа другие элементы политики AssignMessage (такие как <Add>
, <Set>
и <Copy>
) действуют на этот новый объект запроса.
Вы можете получить доступ к новому объекту запроса в других политиках позже в потоке или отправить новый объект запроса внешней службе с политикой ServiceCallout .
Пример 3
В следующем примере создается новый объект запроса с именем «MyRequestObject»:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> </AssignMessage>
При создании нового объекта запроса или ответа другие элементы политики AssignMessage (такие как <Add>
, <Set>
и <Copy>
) действуют на этот новый объект запроса.
Вы можете получить доступ к новому объекту запроса в других политиках позже в потоке или отправить новый объект запроса внешней службе с политикой ServiceCallout .
В следующей таблице описаны атрибуты <AssignTo>
:
Атрибут | Описание | Необходимый? | Тип |
---|---|---|---|
createNew | Определяет, создает ли эта политика новое сообщение при назначении значений. Если значение равно «true», политика создаёт новую переменную указанного Если «ложь», то политика реагирует одним из двух способов:
Если
| Необязательный | Булевое значение |
transport | Указывает тип транспорта для типа сообщения-запроса или ответа. Значение по умолчанию — «http» (единственное поддерживаемое значение). | Необязательный | Нить |
type | Указывает тип нового сообщения, если createNew имеет значение «true». Допустимые значения: «request» или «response».Если этот атрибут пропущен, Edge создает либо запрос, либо ответ в зависимости от того, где в потоке выполняется эта политика. | Необязательный | Нить |
<AssignVariable>
Присваивает значение переменной потока. Если переменная потока не существует, метод <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='AV-via-template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Обычно элемент <AssignVariable>
используется для установки значения по умолчанию для параметра запроса, заголовка или другого значения, которое может быть передано вместе с запросом. Это делается с помощью комбинации дочерних элементов <Ref>
и <Value>
. Подробнее см. в примерах для <Ref>
.
<Name>
(дочерний элемент <AssignVariable>
>)
Указывает имя целевой переменной потока (например, переменной, значение которой задаётся политикой AssignMessage). Если переменная, указанная в <AssignVariable>
, не существует, политика создаёт её с этим именем.
Значение по умолчанию | н/д |
Необходимый? | Необходимый |
Тип | Нить |
Родительский элемент | <AssignVariable> |
Дочерние элементы | Никто |
Элемент <Name>
использует следующий синтаксис:
Синтаксис
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> </AssignVariable> </AssignMessage>
Пример 1
В следующем примере переменная назначения указывается как myvar
и ей присваивается буквальное значение «42»:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Если myvar
не существует, <AssignVariable>
создает его.
<Ref>
(дочерний элемент <AssignVariable>
)
Указывает источник назначения как переменную потока. Переменная потока может быть одной из предопределённых переменных потока (перечисленных в справочнике переменных потока ) или созданной вами пользовательской переменной потока.
Значение <Ref>
всегда интерпретируется как переменная потока; в качестве значения нельзя указать литеральную строку. Чтобы задать литеральное строковое значение, используйте элемент <Value>
.
Значение по умолчанию | н/д |
Необходимый? | Необязательный |
Тип | Нить |
Родительский элемент | <AssignVariable> |
Дочерние элементы | Никто |
При указании переменной потока с помощью <Ref>
опускайте скобки "{}", которые обычно используются для ссылки на переменную потока. Например, чтобы установить значение новой переменной равным значению переменной потока client.host
:
Do this (no brackets): <Ref>client.host</Ref> Do NOT do this (brackets): <Ref>{client.host}</Ref>
Чтобы определить значение по умолчанию для целевой переменной потока, используйте <Value>
в сочетании с <Ref>
. Если переменная потока, указанная <Ref>
, не существует, не может быть прочитана или равна NULL, Edge присваивает значение <Value>
целевой переменной потока.
Элемент <Ref>
использует следующий синтаксис:
Синтаксис
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> </AssignVariable> </AssignMessage>
Пример 1
В следующем примере значение переменной потока request.header.user-agent
присваивается целевой переменной потока myvar
, а значение параметра запроса country
— переменной Country
:
<AssignMessage name="assignvariable-4"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> </AssignMessage>
В этом примере Edge не имеет значения по умолчанию (или резервного значения) ни для одного из назначений.
Пример 2
В следующем примере значение переменной потока request.header.user-agent
присваивается целевой переменной потока myvar
, а значение параметра запроса country
— переменной Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
В этом примере, если значения переменной потока request.header.user-agent
или параметра запроса Country
равны нулю, нечитаемы или имеют неправильный формат, Edge присваивает новым переменным значение «ErrorOnCopy».
Пример 3
Типичный пример использования <AssignVariable>
— установка значения по умолчанию для параметра запроса, заголовка или другого значения, которое может быть передано вместе с запросом. Например, вы создаёте прокси-сервер 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>
может использовать шаблон сообщения из настраиваемого атрибута приложения, который доступен как переменная потока в политике безопасности.
Значение по умолчанию | н/д |
Необходимый? | Необязательный |
Тип | Нить |
Родительский элемент | <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='AV-via-template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Пример 2
В следующем примере задаётся переменная потока, значение которой — предопределённый шаблон сообщения. Используйте этот параметр, если хотите внедрить предопределённый шаблон во время выполнения, не изменяя политику:
<AssignMessage name='AV-via-template-indirectly'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_template_variable'/> </AssignVariable> </AssignMessage>
Пример 3
В следующем примере задаются переменная потока и текстовое значение. В этом случае, если указанная переменная не равна NULL, это значение используется в качестве шаблона. Если указанное значение равно NULL, то в качестве шаблона используется текстовое значение (в данном случае {system.uuid}-{messageid}
). Этот шаблон полезен для предоставления «переопределяющего» значения, когда в некоторых случаях требуется переопределить шаблон по умолчанию (текстовую часть) значениями, устанавливаемыми динамически. Например, условный оператор может извлечь значение из сопоставления «ключ-значение» и установить это значение для указанной переменной:
<AssignMessage name='AV-template-with-fallback'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_variable'>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
<Value>
(дочерний элемент <AssignVariable>
)
Определяет значение целевой переменной потока, заданное с помощью <AssignVariable>
. Значение всегда интерпретируется как строковый литерал; переменную потока нельзя использовать в качестве значения, даже если её заключить в скобки ("{}"). Чтобы использовать переменную потока, используйте <Ref>
.
Значение по умолчанию | н/д |
Необходимый? | Необязательный |
Тип | Нить |
Родительский элемент | <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>
не указано ни одного дочернего элемента, то будут скопированы все части указанного исходного сообщения.
Элемент <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
В следующем примере заголовок, три параметра формы, путь и все параметры запроса копируются из сообщения- request
в новый пользовательский запрос с именем newRequest
:
<AssignMessage name="AM-copy-1"> <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo> <Copy source="request"> <Headers> <Header name="Header_Name_1"/> </Headers> <FormParams> <FormParam name="Form_Param_Name_1"/> <FormParam name="Form_Param_Name_2"/> <FormParam name="Form_Param_Name_3"/> </FormParams> <Path>true</Path> <QueryParams/> </Copy> </AssignMessage>
Поскольку такие элементы, как <Payload>
и <Verb>
отсутствуют, политика не копирует эти части сообщения.
Пример 2
В следующем примере сначала удаляется все из существующего response
сообщения, а затем копируются все значения из другого сообщения с именем secondResponse
в response
сообщение:
<AssignMessage name='AM-Copy-Response'> <AssignTo createNew="false" transport="http" type="response">response</AssignTo> <!-- first remove any existing values --> <Remove/> <!-- then copy everything from the designated message --> <Copy source="secondResponse"/> </AssignMessage>
Элемент <Copy>
имеет один атрибут:
Атрибут | Описание | Необходимый? | Тип |
---|---|---|---|
источник | Указывает исходный объект копии.
| Необязательный | Нить |
<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="AM-copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo>response</AssignTo> </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
. С помощью источника и элемента <AssignTo>
, как указано, это заставляет <Copy>
копировать фразу причины из именованного ответа на объект response
:
<AssignMessage name="AM-copy-reasonphrase-1"> <Copy source="serviceCalloutResponse"> <ReasonPhrase>true</ReasonPhrase> </Copy> <AssignTo>response</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>
является установка кода состояния ответа прокси на другое значение, чем то, что было получено от цели.
<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="AM-Set-Headers"> <Set> <Headers> <Header name='new-header'>{possibly-defined-variable}<Header> </Headers> </Set> <IgnoreUnresolvedVariables>true </IgnoreUnresolvedVariables> </AssignMessage>
Поскольку <IgnoreUnresolvedVariables>
устанавливается на true
, если possibly-defined-variable
не определена, эта политика не будет вынести ошибку.
<Remove>
Удаляет заголовки, параметры запроса, параметры формы и/или полезную нагрузку сообщения из сообщения. Сообщение может быть запросом или ответом. Вы указываете, какое сообщение <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 name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </AssignMessage>
В потоке ответов эта политика удаляет тело ответа, возвращая только заголовки HTTP клиенту.
Пример 2
Следующий пример удаляет все параметры формы и параметр запроса из объекта request
:
<AssignMessage name="AM-remove-2"> <Remove> <!-- Empty (<FormParams/>) removes all form parameters --> <FormParams/> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Пример 3
Следующий пример удаляет все из объекта сообщения:
<AssignMessage name="AM-remove-3"> <Remove/> <AssignTo>request</AssignTo> </AssignMessage>
Как правило, вы делаете это только в том случае, если собираетесь использовать элемент <Set>
или элемент <Copy>
, чтобы установить некоторые значения замены в сообщении.
<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="AM-remove-formparams-1"> <Remove> <FormParams> <FormParam name="form_param_1"/> <FormParam name="form_param_2"/> <FormParam name="form_param_3"/> </FormParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Пример 2
Следующий пример удаляет все параметры формы из запроса:
<AssignMessage name="AM-remove-formparams-2"> <Remove> <FormParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Пример 3
Если есть несколько параметров формы с одинаковым именем, используйте следующий синтаксис:
<AssignMessage name="AM-remove-formparams-3"> <Remove> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Этот пример удаляет «F1», «F2» и второе значение «F3». Если «F3» имеет только одно значение, то это не удалено.
Вы можете использовать <FormParams>
только при выполнении следующих критериев:
- Тип сообщения: запрос
-
Content-Type
: «Приложение/X-WWW-Form-Urlencoded»
<Headers>
(ребенок <Remove>
)
Удаляет указанные заголовки HTTP из запроса или ответа, который указан элементом <AssignTo>
.
Значение по умолчанию | н/д |
Необходимый? | Необязательный |
Тип | Массив элементов <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="AM-remove-one-header"> <Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Пример 2
Следующий пример удаляет все заголовки из запроса:
<AssignMessage name="AM-remove-all-headers"> <Remove> <Headers/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Пример 3
Если есть несколько заголовков с одинаковым именем, используйте следующий синтаксис:
<AssignMessage name="AM-remove-headers-3"> <Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Этот пример удаляет «H1», «H2» и второе значение «H3» из запроса. Если «H3» имеет только одно значение, то он не удален.
<Payload>
(ребенок <Remove>
)
Определяет, удаляет ли <Remove>
полезную нагрузку в запросе или ответе, который указан элементом <AssignTo>
. Установить на «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="AM-remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo>request</AssignTo> </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="AM-remove-queryparams-1"> <Remove> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Пример 2
Следующий пример удаляет все параметры запроса из запроса:
<AssignMessage name="AM-remove-queryparams-2"> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Пример 3
Если есть несколько параметров запросов с одним и тем же именем, используйте следующий синтаксис:
<AssignMessage name="AM-remove-queryparams-3"> <Remove> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Этот пример удаляет «qp1», «qp2» и второе значение «qp3» из запроса. Если «QP3» имеет только одно значение, то он не удален.
Пример 4
Следующий пример удаляет параметр запроса apikey
из запроса:
<AssignMessage name="AM-remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Вы можете использовать <QueryParams>
только при выполнении следующих критериев:
- Http глагол: Get
- Тип сообщения: запрос
<Set>
Устанавливает информацию в сообщении запроса или ответа, которое указано элементом <AssignTo>
. <Set>
перезаписывает заголовки или параметры запроса или формы, которые уже существуют в исходном сообщении. Заголовки и параметры запроса и формы в сообщении HTTP могут содержать несколько значений. Чтобы добавить дополнительные значения для заголовка или параметра, вместо этого используйте элемент <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
Следующий пример устанавливает конкретный заголовок. Когда эта политика будет прикреплена к потоку запросов, она позволит системе восходящей по течению получать дополнительный заголовок, который не был включен в исходный входящий запрос.
<AssignMessage name="AM-Set-Header"> <Set> <Headers> <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header> </Headers> </Set> <AssignTo>request</AssignTo> </AssignMessage>
Пример 2
Следующий пример перезаписывает полезную нагрузку для ответа, а также заголовок Content-Type
.
<AssignMessage name="AM-Overwrite-Payload"> <Set> <Payload contentType="application/json">{ "status" : 42 }</Payload> </Set> <AssignTo>response</AssignTo> </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="AM-set-formparams-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> </Set> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Вы можете использовать <FormParams>
только при выполнении следующих критериев:
- Http глагол: пост
- Тип сообщения: запрос
Если вы определяете параметры пустой формы в своей политике ( <Add><FormParams/></Add>
), политика не добавляет каких -либо параметров формы. Это то же самое, что пропустить <FormParams>
.
<Set>
изменяет Content-Type
сообщения на «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
В следующем примере устанавливает заголовок x-ratelimit-remaining
для значения ratelimit.Quota-1.available.count
переменная:
<AssignMessage name="AM-Set-RateLimit-Header"> <Set> <Headers> <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header> </Headers> </Set> <AssignTo>response</AssignTo> </AssignMessage>
Если вы определяете пустые заголовки в своей политике ( <Set><Headers/></Set>
), политика не устанавливает никаких заголовков. Это будет иметь тот же эффект, что и пропущение <Headers>
.
<Path>
(ребенок <Set>
)
<Payload>
(ребенок <Set>
)
Определяет тело сообщения для запроса или ответа, который определяется элементом <AssignTo>
. Полезной нагрузкой может быть любой действительный тип контента, такой как простой текст, JSON или XML.
Значение по умолчанию | пустая строка |
Необходимый? | Необязательный |
Тип | Нить |
Родительский элемент | <Set> |
Детские элементы | Никто |
Элемент <Payload>
использует следующий синтаксис:
Синтаксис
<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 вы не можете использовать кудрявые скобки для обозначения переменных ссылок в полевых нагрузках 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 name="AM-set-queryparams-1"> <Set> <QueryParams> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> </Set> </AssignMessage>
Вы можете использовать <QueryParams>
только при выполнении следующих критериев:
- Http глагол: Get
- Тип сообщения: запрос
Если вы определяете пустые параметры запроса в своей политике ( <Set><QueryParams/></Set>
), политика не устанавливает каких -либо параметров запроса. Это то же самое, что пропущено <QueryParams>
.
<ReasonPhrase>
(ребенок <Set>
)
Устанавливает причина фразу в ответ. Обычно это делается для отладки в сочетании с <StatusCode>
. Этот элемент не влияет на запрос.
Значение по умолчанию | н/д |
Необходимый? | Необязательный |
Тип | Нить |
Родительский элемент | <Set> |
Детские элементы | Никто |
Элемент <ReasonPhrase>
использует следующий синтаксис:
Синтаксис
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> </Set> </AssignMessage>
Пример 1
Следующий пример определяет простую причину фразу:
<AssignMessage name="set-reasonphrase-1"> <Set> <ReasonPhrase>Bad medicine</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Пример 2
Содержание <ReasonPhrase>
рассматривается как шаблон сообщения. Это означает, что имя переменной, обернутое в кудрявые скобки, будет заменено во время выполнения со значением указанной переменной, как показано в следующем примере:
<AssignMessage name="AM-set-reasonphrase-2"> <Set> <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase> </Set> <AssignTo>response</AssignTo> </AssignMessage>
Вы можете использовать <ReasonPhrase>
только при выполнении следующих критериев:
- Тип сообщения: ответ
<StatusCode>
(ребенок <Set>
)
Устанавливает код состояния в ответе. Этот элемент не влияет на запрос.
Значение по умолчанию | '200' (когда атрибут createNew <AssignTo> установлен на «true») |
Необходимый? | Необязательный |
Тип | Строка или variable |
Родительский элемент | <Set> |
Детские элементы | Никто |
Элемент <StatusCode>
использует следующий синтаксис:
Синтаксис
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <StatusCode>HTTP_status_code or {variable}</StatusCode> </Set> </AssignMessage>
Пример 1
В следующем примере устанавливает простой код состояния:
<AssignMessage name="AM-set-statuscode-404"> <Set> <StatusCode>404</StatusCode> </Set> <AssignTo>response</AssignTo> </AssignMessage>
Пример 2
Содержание <StatusCode>
рассматривается как шаблон сообщения. Это означает, что имя переменной, обернутое в кудрявые скобки, будет заменено во время выполнения со значением указанной переменной, как показано в следующем примере:
<AssignMessage name="set-statuscode-2"> <Set> <StatusCode>{calloutresponse.status.code}</StatusCode> </Set> <AssignTo>response</AssignTo> </AssignMessage>
Вы можете использовать <StatusCode>
только при выполнении следующих критериев:
- Тип сообщения: ответ
<Verb>
(ребенок <Set>
)
Устанавливает глагол HTTP по запросу. Этот элемент не влияет на ответ.
Значение по умолчанию | н/д |
Необходимый? | Необязательный |
Тип | Строка или 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="AM-set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo>request</AssignTo> </AssignMessage>
Пример 2
Содержание <Verb>
рассматривается как шаблон сообщения. Это означает, что имя переменной, обертанное в кудрявые скобки, будет заменено во время выполнения со значением указанной переменной.
В следующем примере используется переменная для заполнения глагола:
<AssignMessage name="AM-set-verb-to-dynamic-value"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo>request</AssignTo> </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="AM-set-version-1"> <Set> <Version>1.1</Version> </Set> </AssignMessage>
Пример 2
Следующее использует переменную в кудрявых брекетах, чтобы установить номер версии:
<AssignMessage name="AM-set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo>request</AssignTo> </AssignMessage>
Содержание <Version>
рассматривается как шаблон сообщения. Это означает, что имя переменной, обертанное в кудрявые скобки, будет заменено во время выполнения со значением указанной переменной.
Вы можете использовать <Version>
только при выполнении следующих критериев:
- Тип сообщения: запрос
Следующий пример создает пользовательский объект запроса с помощью сообщения назначения:
<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>
в новом запросе.