Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Используйте политику 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 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-Handler
FlowCallout вызывает общий поток, передавая параметры, определяющие переменную для хранения выходных данных общего потока, какую операцию общего потока использовать и какие входные данные использовать (здесь строковый литерал, но это также может быть переменная потока). ). Элементы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>
Указывает имя общего потока для вызова. Значение этого элемента должно быть таким же, как значение атрибута имени целевого элемента 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>
Пример
Эта политика String-Handler
FlowCallout передает параметры, которые указывают, где хранить выходные данные общего потока и какие входные данные использовать. Элементы 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>
По умолчанию | Н/Д |
Присутствие | Необходимый. |
Тип | Н/Д |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие | Тип |
---|---|---|---|---|
имя | Имя переменной времени выполнения, которую необходимо создать с помощью этого параметра. | Никто. | Необходимый. | Нить | ссылка | Переменная the содержит значение, которое будет использоваться во время выполнения. Опустите этот атрибут, если вы указываете буквальное значение для использования. | Никто. | Необязательный. | Нить |
ценить | Значение, которое будет использоваться в переменной времени выполнения, созданной с помощью этого параметра. Опустите этот атрибут, если вы указываете имя переменной, которая должна быть источником значения. | Никто. | Необязательный. | Нить |
Элемент <Параметры>
Указывает набор элементов <Parameter> для передачи в качестве переменных в общий поток, вызываемый этой политикой.
Синтаксис
<Parameters> <Parameter name="parameter-name" value='parameter-value' /> </Parameters>
По умолчанию | Н/Д |
Присутствие | Необязательный. |
Тип | Н/Д |
Атрибуты
Никто.
Схемы
Переменные потока
Переменные потока обеспечивают динамическое поведение политик и потоков во время выполнения на основе заголовков HTTP, содержимого сообщения или контекста потока. Дополнительные сведения о переменных потока см. в разделе Справочник по переменным .
Переменная | Описание |
---|---|
| Область действия : во время выполнения общего потока. Значение атрибута имени общего потока. |
| Область действия : во время выполнения общего потока, прикрепленного к перехватчику потока. Имя перехватчика потока. |
Ссылка на ошибку
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .
Ошибки выполнения
Эти ошибки могут возникнуть при выполнении политики.
Код неисправности | Статус HTTP | Причина | Исправить |
---|---|---|---|
flow.SharedFlowNotFound | 500 | Либо общий поток не существует, либо общий поток существует, но не развернут. | build |
Ошибки развертывания
Н/Д
Связанные темы
- Создание общих потоков: многоразовые общие потоки
- Выполнение общих потоков через несколько прокси: подключение общего потока с помощью перехватчика потока