Политика FlowCallout

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

  1. Политика 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>
    
  2. Следующий общий поток default включает политику JavaScript SharedStringFunctions , которая выполняется, когда общий поток вызывается из политики FlowCallout.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <SharedFlow name="default">
      <Step>
        <Name>SharedStringFunctions</Name>
      </Step>
    </SharedFlow>
  3. В общем потоке следующая политика 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>
  4. Следующий код 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);
  5. Выполнение возвращается из политики 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

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

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

Н/Д Необходимый
continueOnError

Установите значение false , чтобы возвращать ошибку в случае сбоя политики. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Необязательный
enabled

Установите значение true , чтобы обеспечить соблюдение политики.

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

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

Этот атрибут устарел.

ЛОЖЬ Устарело

Элемент <DisplayName>

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

<DisplayName>Policy Display Name</DisplayName>
По умолчанию

Н/Д

Если вы опустите этот элемент, будет использовано значение атрибута name политики.

Присутствие Необязательный
Тип Нить

Элемент <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>
По умолчанию Н/Д
Присутствие

Необходимый.

Тип Н/Д

Атрибуты

Атрибут Описание По умолчанию Присутствие Тип
имя Имя переменной времени выполнения, которую нужно создать с этим параметром. Никто. Необходимый. Нить
ссылка

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

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

Элемент <Параметры>

Указывает набор элементов <Parameter> для передачи в качестве переменных в общий поток, вызываемый этой политикой.

Синтаксис

<Parameters>
  <Parameter name="parameter-name" value='parameter-value' />
</Parameters>
По умолчанию Н/Д
Присутствие

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

Тип Н/Д

Атрибуты

Никто.

Схемы

Переменные потока

Переменные потока обеспечивают динамическое поведение политик и потоков во время выполнения на основе заголовков HTTP, содержимого сообщения или контекста потока. Дополнительные сведения о переменных потока см. в разделе Справочник по переменным .

Переменная Описание

apigee.edge.sharedflow.name

Область применения : во время выполнения общего потока.
Тип : Строка
Разрешение : чтение

Значение атрибута имени общего потока.

apigee.edge.flowhook.name

Область действия : во время выполнения общего потока, прикрепленного к обработчику потока.
Тип : Строка
Разрешение : чтение

Имя хука потока.

Справочник по ошибкам

В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .

Ошибки выполнения

Эти ошибки могут возникнуть при выполнении политики.

Код неисправности Статус HTTP Причина Исправить
flow.SharedFlowNotFound 500 Либо общий поток не существует, либо общий поток существует, но не развернут.

Ошибки развертывания

Н/Д

похожие темы