Правила в отношении выносок в потоке

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

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

Обязательно.

Тип Н/Д

Атрибуты

Нет.

Элемент <Parameter>

Указывает параметр и значение (или источник значения), которые будут переданы в качестве переменной в общий поток, вызываемый этим правилом.

С помощью параметра можно указать значение (или переменную, содержащую значение), которое должно быть передано в общий поток, вызываемый правилом. Это похоже на указание параметра при вызове функции. Как и в случае с параметром функции, значение параметра 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>
По умолчанию Н/Д
Присутствие

Обязательно.

Тип Н/Д

Атрибуты

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

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

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

Элемент <Parameters>

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

Синтаксис

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

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

Тип Н/Д

Атрибуты

Нет.

Схемы

Переменные процесса

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

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

apigee.edge.sharedflow.name

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

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

apigee.edge.flowhook.name

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

Название хука потока.

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

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

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

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

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

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

Н/Д

Статьи по теме