Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Используйте политику FlowCallout для вызова общего потока либо из API-прокси, либо из другого общего потока.
В общем потоке вы создаете последовательность шагов, которые можно повторно использовать во время выполнения из разных мест. Эти шаги реализуются в виде политик, например, внутри API-прокси. Политика FlowCallout позволяет вызывать общий поток из API-прокси и других общих потоков. Она работает как вызов функции в традиционном языке программирования.
- Например, представьте, что вы создали общий поток с функциями безопасности, такими как проверка ключа API, проверка токена OAuth и защита с помощью регулярных выражений. Этот общий поток представляет собой ваше соглашение о способе проверки входящих запросов. Используя политики FlowCallout, вы можете вызывать этот общий поток из нескольких API-прокси.
- Вызов одного общего потока из другого можно осуществить, реализовав политику FlowCallout внутри общего потока.
Образцы
Подтвердите ключ API в общем процессе.
В этом примере общий поток используется для выполнения стандартных задач, связанных с безопасностью. Здесь общий поток проверяет ключ API. API-прокси и другие общие потоки могут использовать политику FlowCallout для выполнения вызовов к этому общему потоку.
Приведенное ниже определение общего потока включает политику Verify-API-Key , которая выполняется при вызове общего потока из политики FlowCallout в API-прокси.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SharedFlow name="default">
<Step>
<Name>Verify-API-Key</Name>
</Step>
</SharedFlow> Политика VerifyAPIKey в рамках предыдущего общего потока извлекает значение ключа и проверяет его.
<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key">
<DisplayName>Verify API Key</DisplayName>
<APIKey ref="request.queryparam.apikey"/>
</VerifyAPIKey> Следующая политика FlowCallout, используемая в API-прокси, вызывает предыдущий общий поток для проверки ключа API. Пакет общих потоков verify-apikey-shared (здесь не показан) настраивает общий поток так же, как пакет APIProxy настраивает прокси.
<FlowCallout async="false" continueOnError="false" enabled="true" name="Auth-Flow-Callout">
<DisplayName>Auth Flow Callout</DisplayName>
<SharedFlowBundle>verify-apikey-shared</SharedFlowBundle>
</FlowCallout>Передача параметров в общий поток
Этот пример иллюстрирует, как передавать параметры из политики FlowCallout в общий поток. Здесь политика FlowCallout вызывает общий поток, предназначенный для выполнения общих функций обработки строк. Общий поток включает JavaScript, который объединяет входные данные, переводит их в нижний регистр или делает и то, и другое. Политика FlowCallout определяет параметры, которые указывают на входные и выходные строки, а также на то, что нужно сделать с входными данными.
Политика
String-HandlerFlowCallout вызывает общий поток, передавая параметры, указывающие переменную для хранения выходных данных общего потока, используемую операцию общего потока и используемые входные данные (здесь строковый литерал, но это также может быть переменная потока). ЭлементыParameterуказывают имена и значения переменных, создаваемых во время выполнения. Общий поток может получать эти переменные для использования в собственном коде.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler"> <DisplayName>String Handler</DisplayName> <Parameters> <Parameter name="input">Gladys Kravitz</Parameter> <Parameter name="operations">concatenate tolowercase</Parameter> <Parameter name="outputVariable">string.handler.output</Parameter> </Parameters> <SharedFlowBundle>StringHandler</SharedFlowBundle> </FlowCallout>Следующий
defaultобщий поток включает политику JavaScriptSharedStringFunctions, которая выполняется при вызове общего потока из политики FlowCallout.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <SharedFlow name="default"> <Step> <Name>SharedStringFunctions</Name> </Step> </SharedFlow>В общем потоке выполнения следующая политика JavaScript
SharedStringFunctionsуказывает файл JavaScript SharedStringFunctions.js с кодом для выполнения.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="SharedStringFunctions"> <DisplayName>SharedStringFunctions</DisplayName> <Properties/> <ResourceURL>jsc://SharedStringFunctions.js</ResourceURL> </Javascript>
Следующий JavaScript-скрипт, SharedStringFunctions.js, выполняется из политики JavaScript
SharedStringFunctions. Этот скрипт извлекает значения из переменных, созданных из элементовParameterполитики FlowCallout.// Input value from the calling API proxy. var handledString = context.getVariable("input"); // Variable to use for output from this script. var outputVariable = context.getVariable("outputVariable"); // A space-separated list of things to do to the input string. // Convert to lower case to handle unintentional capitals in configuration. var operation = context.getVariable("operations").toLowerCase(); // If "lowercase" was given as an operation, convert the input to lowercase. if (operation.includes("tolowercase")) { handledString = handledString.toLowerCase(); } // If "concatenate" was given as an operation, concatenate the input. if (operation.includes("concatenate")) { handledString = handledString.replace(/\s+/g, ''); } // Assign the resulting string to the output variable specified by // the calling API proxy. context.setVariable(outputVariable, handledString);
- Процесс выполнения переходит от политики JavaScript к общему потоку, а затем к политике FlowCallout в исходном API-прокси.
Ссылка на элемент
Ниже перечислены элементы и атрибуты, которые можно настроить в этой политике:
<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">
<DisplayName>Custom label used in UI</DisplayName>
<SharedFlowBundle>thereferencedsharedflowbundle</SharedFlowBundle>
</FlowCallout>атрибуты <FlowCallout>
<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">
В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:
| Атрибут | Описание | По умолчанию | Присутствие |
|---|---|---|---|
name | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
| По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
|---|---|
| Присутствие | Необязательный |
| Тип | Нить |
<SharedFlowBundle> элемент
Указывает имя вызываемого общего потока. Значение этого элемента должно совпадать со значением атрибута name целевого элемента SharedFlowBundle.
<SharedFlowBundle/>
В простейшем примере вы указываете имя вызываемого общего потока в качестве значения для этого элемента. То есть значение этого элемента должно совпадать со значением атрибута name общего потока.
<SharedFlowBundle>Shared-Flow-Name</SharedFlowBundle>
| По умолчанию | Н/Д |
| Присутствие | Необходимый. |
| Тип | Н/Д |
Атрибуты
Никто.
Элемент <Параметр>
Указывает параметр и значение (или источник значения), которые будут переданы в качестве переменной в общий поток, вызываемый данной политикой.
С помощью параметра можно указать значение (или переменную, содержащую значение), которое должно быть передано в общий поток, вызываемый политикой. Это концептуально похоже на указание параметра в вызове функции. Как и в случае с параметром функции, значение параметра FlowCallout может меняться в зависимости от контекста вызова общего потока.
Параметры FlowCallout видны только во время выполнения общего потока.
Синтаксис
Этот элемент можно использовать с любым из следующих вариантов синтаксиса. Обратите внимание, что в случае использования литерального значения формат указанного значения будет зависеть от кода, который его использует.
<!- A literal value in an attribute. --/> <Parameter name="parameter-name" value='parameter-value' /> <!- A reference to a variable in an attribute. --/> <Parameter name="parameter-name" ref='source-variable-name' /> <!- A literal value in the element content. --/> <Parameter name="parameter-name">parameter-value</Parameter> <!- An reference to an attribute in the element content. --/> <Parameter name="parameter-name">{source-variable-name}</Parameter>
Пример
Эта политика FlowCallout, String-Handler передает параметры, определяющие место хранения выходных данных общего потока и используемые входные данные. Элементы Parameter указывают имена и значения переменных, создаваемых во время выполнения. Общий поток может получать эти переменные для использования в своем собственном коде.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler">
<DisplayName>String Handler</DisplayName>
<Parameters>
<Parameter name="input">Gladys Kravitz</Parameter>
<Parameter name="outputVariable">string.handler.output</Parameter>
</Parameters>
<SharedFlowBundle>StringHandler</SharedFlowBundle>
</FlowCallout>| По умолчанию | Н/Д |
| Присутствие | Необходимый. |
| Тип | Н/Д |
Атрибуты
| Атрибут | Описание | По умолчанию | Присутствие | Тип |
|---|---|---|---|---|
| имя | Имя переменной времени выполнения, которая будет создана с помощью этого параметра. | Никто. | Необходимый. | Нить | ссылка | Переменная, содержащая значение, используемое во время выполнения. Опустите этот атрибут, если вы указываете буквальное значение. | Никто. | Необязательный. | Нить |
| ценить | Значение, используемое в переменной времени выполнения, созданной с помощью этого параметра. Опустите этот атрибут, если вы указываете имя переменной, которая должна быть источником значения. | Никто. | Необязательный. | Нить |
Элемент <Параметры>
Указывает набор элементов <Parameter> , которые будут переданы в качестве переменных в общий поток, вызываемый данной политикой.
Синтаксис
<Parameters> <Parameter name="parameter-name" value='parameter-value' /> </Parameters>
| По умолчанию | Н/Д |
| Присутствие | Необязательный. |
| Тип | Н/Д |
Атрибуты
Никто.
Схемы
Переменные потока
Переменные потока позволяют динамически изменять поведение политик и потоков во время выполнения на основе HTTP-заголовков, содержимого сообщений или контекста потока. Дополнительную информацию о переменных потока см. в справочнике по переменным .
| Переменная | Описание |
|---|---|
| Область применения : Во время выполнения совместного потока данных. Значение атрибута имени общего потока. |
| Область применения : Во время выполнения общего потока, прикрепленного к обработчику потока. Название крюка для измерения потока. |
Ссылка на ошибку
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .
Ошибки выполнения
Эти ошибки могут возникнуть при выполнении политики.
| Код неисправности | Статус HTTP | Причина | Исправить |
|---|---|---|---|
flow.SharedFlowNotFound | 500 | Либо общий поток не существует, либо общий поток существует, но не развернут. | build |
Ошибки развертывания
Н/Д
Связанные темы
- Создание общих потоков: многократно используемые общие потоки
- Выполнение общих потоков через несколько прокси-серверов: прикрепление общего потока с помощью обработчика потока.