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

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

Тип Н/Д

Атрибуты

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

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

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

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

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

Синтаксис

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

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

Тип Н/Д

Атрибуты

Никто.

Схемы

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

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

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

apigee.edge.sharedflow.name

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

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

apigee.edge.flowhook.name

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

Имя перехватчика потока.

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

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

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

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

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

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

Н/Д

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