Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Потоки — это основные строительные блоки API-прокси. Потоки позволяют программировать поведение API, настраивая последовательность выполнения политик и кода API-прокси.
Для получения общего представления о потоках см. раздел «Управление выполнением прокси-сервера с помощью потоков» .
В этой теме описывается, как создавать условные потоки и добавлять логику (политики) к потокам на высоком уровне. Искусство создания условий требует более детального изучения, чем рассматривается в этой теме. Для получения более подробной информации см. Обзор переменных потока и Условия с переменными потока .
Прикрепление политик к потокам
Edge поставляется с множеством различных типов предопределенных политик для обеспечения безопасности, управления трафиком и обработки сообщений. Кроме того, политики позволяют добавлять собственный код для полной настройки обработки сообщений.
Например:
- Прикрепите политику безопасности OAuth к предварительному потоку запроса ProxyEndpoint . Поскольку предварительный поток запроса ProxyEndpoint является первым потоком в конвейере, вы можете немедленно отклонить запрос, если он нарушает ваши политики безопасности.
- Прикрепите политику преобразования 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>В этой конфигурации, если на API-прокси поступает GET- запрос с URI-шаблоном ... /issue/** (/issue/ с любым содержимым URI после последнего косого слеша), для этого вызова API устанавливается квота.
О потоках условного характера
Любые политики, прикрепленные к предварительному или последующему потоку, всегда выполняются. Однако политики в условном потоке выполняются только в том случае, если условие потока оценивается как истинное.
В процессе обработки запроса и ответа в каждом сегменте выполняется только один условный поток — первый поток, условие которого оценивается как истинное. Это означает, что в каждом из следующих сегментов может выполняться один условный поток.
- Конвейер обработки запросов 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, условие оценивается как истинное, и выполняется логика, связанная с условным потоком.
Затем разработчики приложений получают доступ к вашим ресурсам, отправляя запросы к 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. В меню «Навигатор» выберите 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>Следующие шаги
В следующих разделах более подробно рассматриваются вопросы построения условий и использования переменных: