Политика 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">

The following table describes attributes that are common to all policy parent elements:

Attribute Description Default Presence
name

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

N/A Required
continueOnError

Set to false to return an error when a policy fails. This is expected behavior for most policies.

Set to true to have flow execution continue even after a policy fails.

false Optional
enabled

Set to true to enforce the policy.

Set to false to turn off the policy. The policy will not be enforced even if it remains attached to a flow.

true Optional
async

This attribute is deprecated.

false Deprecated

<DisplayName> element

Use in addition to the name attribute to label the policy in the management UI proxy editor with a different, natural-language name.

<DisplayName>Policy Display Name</DisplayName>
Default

N/A

If you omit this element, the value of the policy's name attribute is used.

Presence Optional
Type String

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

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

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

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

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
flow.SharedFlowNotFound 500 Either the shared flow does not exist, or the shared flow exists but is not deployed.

Deployment errors

N/A

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