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