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


Прикрепляя политику к выбранному потоку, вы настраиваете прокси-сервер API для применения политики квот только для запросов, сделанных к этому URI потока и комбинации команд. Например, если вы прикрепите политику к потоку обучения в запросе, в представлении кода редактора прокси будет создан следующий 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>В этой конфигурации, если запрос GET поступает на прокси-сервер API с шаблоном 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 . Переменная потока — это именованные ссылки, которые содержат информацию о состоянии, связанную с транзакцией API, обрабатываемой Edge. Edge определяет множество переменных состояния, на которые вы можете ссылаться.
Службы RESTful — это коллекции ресурсов API. Ресурс API — это фрагмент пути URI, который идентифицирует некоторый объект, к которому разработчики могут получить доступ, вызвав ваш API. Например, если серверная часть вашего сервиса предоставляет отчеты о погоде и прогнозы погоды, ваш API может определить два условных потока, которые сопоставляются с этими ресурсами API: /reports и /forecasts . Когда вызов API включает в URL-адрес один из этих ресурсов, условие оценивается как true и выполняется логика, прикрепленная к условному потоку.
Затем разработчики приложений получают доступ к вашим ресурсам, отправляя запросы по 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 .)
Новый поток под названием Flow-1 теперь отображается в меню «Навигатор».

Теперь обратите внимание на конфигурацию XML для ProxyEndpoint. Выберите «Поток-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>Следующие шаги
В следующих разделах представлена более подробная информация о построении условий и использовании переменных: