Политика FlowCallout

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

  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> элемент

Указывает имя вызываемого общего потока. Значение этого элемента должно совпадать со значением атрибута 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-заголовков, содержимого сообщений или контекста потока. Дополнительную информацию о переменных потока см. в справочнике по переменным .

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

apigee.edge.sharedflow.name

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

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

apigee.edge.flowhook.name

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

Название крюка для измерения потока.

Ссылка на ошибку

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

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

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

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

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

Н/Д

Связанные темы