Настройка процессов

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

Потоки – это основные строительные блоки прокси API. Потоки позволяют программировать поведение API, настраивая последовательность, в которой политики и код выполняются прокси API.

Общие сведения о потоках приведены в статье Управление выполнением прокси с помощью потоков.

В этой статье рассказывается, как создавать условные потоки и добавлять в них логику (правила). Создание условий – это более сложный процесс, чем описано в этой статье. Подробную информацию можно найти в статьях Обзор переменных потока и Условия с переменными потока.

Как прикрепить правила к потокам

В Edge есть много разных типов предопределенных правил для обеспечения безопасности, управления трафиком и обработки сообщений. Кроме того, правила позволяют добавлять собственный код, чтобы полностью настроить обработку сообщений.

Пример:

  • Прикрепите политику безопасности OAuth к PreFlow запроса ProxyEndpoint. Поскольку PreFlow запроса ProxyEndpoint является первым потоком в конвейере, вы можете сразу отклонить запрос, если он нарушает правила безопасности.
  • Прикрепите правило преобразования JSON в XML к PostFlow ответа TargetEndpoint, чтобы преобразовать ответ из JSON в XML.
  • Прикрепите правило JavaScript к условному потоку ProxyEndpoint, чтобы выполнить код JavaScript для обработки запроса.

После создания условного потока его можно прикрепить к правилу. Выбрав поток, нажмите на значок + Шаг на диаграмме запроса или ответа, чтобы добавить в поток новое или существующее правило.

В меню навигатора выделен пример условного потока под названием "Проблема", а на панели "Поток" показана кнопка "Шаг".

На панели "Добавить шаг" создается новый экземпляр правила с типом "Квота" и отображаемым названием "Квота-2".

Прикрепив правило к выбранному потоку, вы настроите прокси-сервер API так, чтобы правило квоты применялось только к запросам, отправленным с использованием URI и метода, указанных в этом потоке. Например, если вы прикрепите политику к потоку learn в запросе, в режиме просмотра кода редактора прокси будет сгенерирован следующий XML-код:

<ProxyEndpoint name="default">
...
   <Flow name="issue">
        <Description/>
        <Request>
            <Step>
                <Name>Quota-2</Name>
            </Step>
        </Request>
        <Response/>
        <Condition>(proxy.pathsuffix MatchesPath "/issue/**") and (request.verb = "GET")</Condition>
    </Flow>
... 
</ProxyEndpoint>

В этой конфигурации, если в прокси-сервер API поступает запрос GET с шаблоном URI .../issue/** (/issue/ с любым содержимым в URI после последней косой черты), к этому вызову API применяется квота.

Процессы с условиями

Все политики, прикрепленные к PreFlow или PostFlow, всегда выполняются. Однако правила в условном потоке выполняются только в том случае, если условие потока оценивается как истинное.

При обработке запроса и ответа выполняется только один условный поток на сегмент – первый поток, условие которого оценивается как истинное. Это означает, что в каждом из следующих случаев может быть выполнен один условный поток:

  • Конвейер запросов ProxyEndpoint
  • Конвейер запросов TargetEndpoint
  • Конвейер ответов ProxyEndpoint
  • Конвейер ответов TargetEndpoint

Видео. Посмотрите короткое видео о процессах с условиями.

Например, в приведенном ниже определении ProxyEndpoint показан условный поток, который выполняется ProxyEndpoint при любом запросе HTTP GET к прокси-серверу API:

<ProxyEndpoint name="default">
  <PreFlow>
    <Request/>
    <Response/>
  </PreFlow>   
  <Flows>
    <Flow name="Flow-1">
      <Condition>request.verb="GET"</Condition>
      <Request/>
      <Response/>
    </Flow>
  </Flows>
  <PostFlow>
    <Request/>
    <Response/>
  </PostFlow>
  ...
</ProxyEndpoint>

Обратите внимание, что условие ссылается на request.verb переменной flow. Переменная потока – это именованная ссылка, которая содержит информацию о состоянии, связанную с транзакцией API, обработанной Edge. Edge определяет множество переменных состояния, на которые можно ссылаться.

RESTful-сервисы представляют собой наборы ресурсов API. Ресурс API – это фрагмент пути URI, который идентифицирует объект, доступный разработчикам при вызове вашего API. Например, если серверная часть вашего сервиса предоставляет отчеты о погоде и прогнозы погоды, ваш API может определять два условных потока, которые сопоставляются с этими ресурсами API: /reports и /forecasts. Если в URL вызова API есть один из этих ресурсов, условие оценивается как истинное и выполняется логика, связанная с условным потоком.

Разработчики приложений получают доступ к вашим ресурсам, отправляя запросы по URL в следующем формате:

http://myAPIs.myCo.com/weather/reports

Или:

http://myAPIs.myCo.com/weather/forecasts

В прокси-сервере API можно определить условный поток, соответствующий определенному ресурсу:

<ProxyEndpoint name="default">
  <PreFlow>
    <Request/>
    <Response/>
  </PreFlow>   
  <Flows>
    <Flow name="Flow-1">
      <Condition>(proxy.pathsuffix MatchesPath "/reports")</Condition>
      <Request/>
      <Response/>
    </Flow>
    <Flow name="Flow-2">
      <Condition>(proxy.pathsuffix MatchesPath "/forecasts")</Condition>
      <Request/>
      <Response/>
    </Flow>
  </Flows>
  <PostFlow>
    <Request/>
    <Response/>
  </PostFlow>
  ...
</ProxyEndpoint>

В этом примере вы ссылаетесь на переменную потока proxy.pathsuffix, которая содержит суффиксную часть URL, используемого для доступа к прокси-серверу API. Затем вы можете прикрепить разные правила к условному потоку для каждого ресурса.

Как добавить процесс с условиями

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

Чтобы добавить условный поток, выберите вкладку Разработка в конструкторе прокси API.

Вкладка &quot;Разработка&quot; в конструкторе прокси-серверов

Нажмите на значок плюса в нужной конечной точке.

Кнопка &quot;Добавить условный процесс&quot;

В форме Новый процесс с условиями можно задать название процесса и настроить условие. В следующем примере добавляется простое условие, которое оценивает HTTP-запрос на наличие команды GET (в отличие от PUT, POST и т. д.) в любом URI после базового пути.

На панели &quot;Новый процесс с условиями&quot; процесс называется &quot;Процесс-1&quot;, а тип условия, путь и глагол настроены.

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

Новый процесс Flow-1 появится в меню навигатора.

Выделен поток Flow-1

Теперь посмотрите на XML-конфигурацию для ProxyEndpoint. В меню Навигатор выберите Flow-1.

Вы увидите следующую конфигурацию.

<PreFlow name="PreFlow">
    <Request/>
    <Response/>
</PreFlow>   
<Flows>
    <Flow name="Flow-1">
      <Request/>
      <Response/>
      <Condition>(proxy.pathsuffix MatchesPath "/**") and (request.verb = "GET")</Condition>
    </Flow>
</Flows>
<PostFlow name="PostFlow">
    <Request/>
    <Response/>
</PostFlow>

Дальнейшие действия

Подробную информацию о создании условий и использовании переменных можно найти в следующих статьях: