Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Потоки – это основные строительные блоки прокси API. Потоки позволяют программировать поведение API, настраивая последовательность, в которой политики и код выполняются прокси API.
Общие сведения о потоках приведены в статье Управление выполнением прокси с помощью потоков.
В этой статье рассказывается, как создавать условные потоки и добавлять в них логику (правила). Создание условий – это более сложный процесс, чем описано в этой статье. Подробную информацию можно найти в статьях Обзор переменных потока и Условия с переменными потока.
Как прикрепить правила к потокам
В Edge есть много разных типов предопределенных правил для обеспечения безопасности, управления трафиком и обработки сообщений. Кроме того, правила позволяют добавлять собственный код, чтобы полностью настроить обработку сообщений.
Пример:
- Прикрепите политику безопасности OAuth к PreFlow запроса ProxyEndpoint. Поскольку PreFlow запроса ProxyEndpoint является первым потоком в конвейере, вы можете сразу отклонить запрос, если он нарушает правила безопасности.
- Прикрепите правило преобразования JSON в XML к PostFlow ответа TargetEndpoint, чтобы преобразовать ответ из JSON в XML.
- Прикрепите правило JavaScript к условному потоку ProxyEndpoint, чтобы выполнить код JavaScript для обработки запроса.
После создания условного потока его можно прикрепить к правилу. Выбрав поток, нажмите на значок + Шаг на диаграмме запроса или ответа, чтобы добавить в поток новое или существующее правило.


Прикрепив правило к выбранному потоку, вы настроите прокси-сервер 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.

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

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

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