Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Основная задача разработчика, работающего с Apigee Edge, – настраивать прокси API, которые выступают в качестве прокси для API или серверных сервисов. В этом документе перечислены все элементы конфигурации, доступные при создании прокси API.
Если вы только учитесь создавать прокси API, рекомендуем начать с раздела Создание простого прокси API.
Чаще всего конфигурации прокси-серверов изменяют следующими способами:
- Как использовать редактор XML в интерфейсе Edge
- Скачайте конфигурацию и измените ее локально, как описано в разделе Локальная разработка конфигураций прокси-серверов.
Локальная разработка конфигураций прокси-серверов
Вы можете скачать конфигурации прокси-сервера, чтобы изменить их на локальном компьютере. После этого вы загружаете результаты в Edge. Этот подход позволяет интегрировать конфигурации прокси-сервера в систему контроля версий и другие общие рабочие процессы. Кроме того, при работе с конфигурацией прокси-сервера локально вы можете использовать собственный редактор XML и инструменты проверки.
В этом разделе рассказывается, как скачать существующую конфигурацию прокси-сервера, изменить ее и загрузить обратно в Edge для развертывания. Вы также можете использовать apigeetool, чтобы скачать и развернуть новую конфигурацию прокси (с помощью команд fetchproxy и deployproxy соответственно).
Чтобы изменить конфигурацию прокси-сервера локально с помощью интерфейса:
- Скачайте текущую конфигурацию прокси-сервера в интерфейсе Edge. (В представлении API Proxies (Прокси API) выберите Project > Download Revision (Проект > Скачать версию).)
- На локальном компьютере создайте новый каталог и распакуйте в него скачанный ZIP-файл.
Чтобы распаковать ZIP-файл, можно использовать утилиту, например
unzip, как показано в следующем примере:mkdir myappdir
unzip ./my-app_app_rev3_2019_04_20.zip -d myappdirРасширенное содержимое ZIP-файла должно быть похоже на структуру, описанную в разделе Структура прокси-сервера API.
- При необходимости измените исходные файлы. Описание исходных файлов в конфигурации прокси-сервера приведено в статье Файлы конфигурации и структура каталогов прокси-сервера API.
Например, чтобы включить мониторинг работоспособности в прокси-сервере API, измените файл конфигурации TargetEndpoint в каталоге
/apiproxy/targets/. По умолчанию в этом каталоге находится файлdefault.xml, но если вы используете условные цели, то в нем могут быть файлы с другими названиями.В этом случае, если файл конфигурации TargetEndpoint и его каталог не существуют, создайте их.
- После того как вы закончите редактировать файлы конфигурации прокси, обязательно сохраните изменения.
- Перейдите в новый каталог, созданный при распаковке ZIP-файлов (корень распакованных файлов конфигурации).
Например, если вы распаковали файлы в каталог
/myappdir, перейдите в него, как показано в следующем примере:cd myappdir
Вам нужно перейти в этот каталог, прежде чем повторно архивировать файлы конфигурации прокси-сервера, поскольку каталог
/myappdirне должен быть включен в ZIP-файл. Каталог верхнего уровня в ZIP-файле должен называться/apiproxy. - Заново заархивируйте файлы конфигурации прокси-сервера, включая новые или измененные файлы. Вы можете использовать утилиту, например
zip, как показано в следующем примере:zip my-new-proxy.zip -r .
Каталог верхнего уровня в ZIP-файле должен называться
/apiproxy.К названию ZIP-файла нет особых требований. Например, вам не нужно увеличивать номер версии или указывать дату в названии файла, но это может быть полезно для отладки или контроля версий.
При загрузке новой конфигурации прокси-сервера Edge увеличивает номер ее версии.
- Загрузите новую конфигурацию прокси-сервера с помощью интерфейса Edge. (В представлении API Proxies (Прокси API) выберите Project > Upload a New Revision (Проект > Загрузить новую версию).)
Если вы получили сообщение об ошибке, например Bundle is invalid. Empty bundle., убедитесь, что каталог верхнего уровня в вашем ZIP-файле называется
/apiproxy. Если нет, заархивируйте файлы конфигурации прокси-сервера повторно из корневого каталога распакованного архива.После загрузки новой конфигурации прокси-сервера Edge увеличивает номер версии и показывает его в представлении Сводка версий.
После того как вы загрузите новую версию с помощью интерфейса, Edge не развернет ее автоматически.
- Разверните новую версию.
Подробнее о том, как скачать прокси-сервер с помощью интерфейса и Management API… (статья на форуме Apigee).
Структура прокси-сервера API
Прокси-сервер API состоит из следующих компонентов:
| Базовая конфигурация | Основные настройки конфигурации для прокси-сервера API. Подробнее о базовой конфигурации… |
| Конфигурация ProxyEndpoint | Настройки входящего HTTP-подключения (от запрашивающих приложений к Apigee Edge), потоков запросов и ответов, а также прикрепления правил. Подробнее ProxyEndpoint… |
| Настройка TargetEndpoint | Настройки исходящего HTTP-подключения (от Apigee Edge к бэкенд-службе), потоки запросов и ответов, а также прикрепленные правила. Подробнее о TargetEndpoint… |
| Потоки | Конвейеры запросов и ответов ProxyEndpoint и TargetEndpoint, к которым можно прикрепить правила. Подробнее о потоках… |
| Правила | Файлы конфигурации в формате XML, соответствующие схемам правил Apigee Edge. Правила |
| Полезные ресурсы | Скрипты, JAR-файлы и XSLT-файлы, на которые ссылаются правила для выполнения пользовательской логики. Ресурсы |
Структура каталога прокси-сервера API и его содержимое
Компоненты, перечисленные в таблице выше, определяются файлами конфигурации в следующей структуре каталогов:

Файлы конфигурации и структура каталогов прокси-сервера API
В этом разделе описаны файлы конфигурации и структура каталогов прокси-сервера API.
Базовая конфигурация
/apiproxy/weatherapi.xml
Базовая конфигурация прокси-сервера API, в которой задается название прокси-сервера API. Название должно быть уникальным в пределах организации.
Пример конфигурации:
<APIProxy name="weatherapi"> </APIProxy>
Элементы базовой конфигурации
| Название | Описание | По умолчанию | Обязательно? |
|---|---|---|---|
APIProxy |
|||
name |
Название прокси-сервера API, которое должно быть уникальным в пределах организации. В названии можно использовать только следующие символы:
A-Za-z0-9_- |
Н/Д | Да |
revision |
Номер версии конфигурации прокси-сервера API. Вам не нужно явно задавать номер версии, поскольку Apigee Edge автоматически отслеживает текущую версию прокси API. | Н/Д | Нет |
ConfigurationVersion |
Версия схемы конфигурации прокси-сервера API, которой соответствует этот прокси-сервер API. В настоящее время поддерживается только значение majorVersion 4 и minorVersion 0. Этот параметр может быть использован в будущем для включения эволюции формата прокси-сервера API. | 4.0 | Нет |
Description |
Текстовое описание прокси-сервера API. Если описание указано, оно будет показываться в интерфейсе управления Edge. | Н/Д | Нет |
DisplayName |
Удобное имя, которое может отличаться от атрибута name конфигурации прокси-сервера API. |
Н/Д | Нет |
Policies |
Список правил в каталоге /policies этого прокси-сервера API. Обычно этот элемент можно увидеть, только если прокси-сервер API был создан с помощью интерфейса управления Edge.
Это просто настройка манифеста, которая позволяет видеть содержимое прокси-сервера API. |
Н/Д | Нет |
ProxyEndpoints |
Список ProxyEndpoint в каталоге /proxies этого прокси-сервера API. Обычно этот элемент можно увидеть, только если прокси-сервер API был создан с помощью интерфейса управления Edge. Это просто настройка манифеста, которая позволяет видеть содержимое прокси-сервера API. |
Н/Д | Нет |
Resources |
Список ресурсов (JavaScript, Python, Java, XSLT) в каталоге /resources этого прокси-сервера API. Обычно этот элемент можно увидеть, только если прокси-сервер API был создан с помощью интерфейса управления Edge. Это просто настройка манифеста, которая позволяет видеть содержимое прокси-сервера API. |
Н/Д | Нет |
Spec |
Определяет спецификацию OpenAPI, связанную с прокси-сервером API. Значением является URL или путь в хранилище спецификаций. Примечание. Магазин спецификаций доступен только в новом интерфейсе Edge. Подробнее о хранилище спецификаций рассказывается в статье Как управлять спецификациями и предоставлять к ним доступ. |
Н/Д | Нет |
TargetServers |
Список TargetServer, на которые ссылаются любые TargetEndpoint этого прокси-сервера API. Обычно этот элемент можно увидеть, только если прокси-сервер API был создан с помощью интерфейса управления Edge. Это просто настройка манифеста, которая позволяет видеть содержимое прокси-сервера API. | Н/Д | Нет |
TargetEndpoints |
Список TargetEndpoint в каталоге /targets этого прокси-сервера API. Обычно этот элемент можно увидеть, только если прокси-сервер API был создан с помощью интерфейса управления Edge. Это просто настройка манифеста, которая позволяет видеть содержимое прокси-сервера API. |
Н/Д | Нет |
ProxyEndpoint
На изображении ниже показан поток запросов и ответов.

/apiproxy/proxies/default.xml
Конфигурация ProxyEndpoint определяет входящий (клиентский) интерфейс для прокси API. Когда вы настраиваете ProxyEndpoint, вы задаете конфигурацию сети, которая определяет, как клиентские приложения должны вызывать API, работающий через прокси.
Приведенная ниже конфигурация ProxyEndpoint будет храниться в файле /apiproxy/proxies:
<ProxyEndpoint name="default">
<PreFlow/>
<Flows/>
<PostFlow/>
<HTTPProxyConnection>
<BasePath>/weather</BasePath>
<VirtualHost>default</VirtualHost>
</HTTPProxyConnection>
<FaultRules/>
<DefaultFaultRule/>
<RouteRule name="default">
<TargetEndpoint>default</TargetEndpoint>
</RouteRule>
</ProxyEndpoint>В базовой конечной точке ProxyEndpoint должны быть следующие элементы конфигурации:
Элементы конфигурации ProxyEndpoint
| Название | Описание | По умолчанию | Обязательно? |
|---|---|---|---|
ProxyEndpoint |
|||
name |
Название ProxyEndpoint. Должен быть уникальным в конфигурации прокси-сервера API, если (в редких случаях) определено несколько ProxyEndpoint. В названии можно использовать только следующие символы: A-Za-z0-9._\-$ %. |
Н/Д | Да |
PreFlow |
Определяет правила в потоке PreFlow запроса или ответа. | Н/Д | Да |
Flows |
Определяет правила в условных потоках запроса или ответа.
|
Н/Д | Да |
PostFlow |
Определяет правила в потоке PostFlow запроса или ответа.
|
Н/Д | Да |
HTTPProxyConnection |
Определяет сетевой адрес и путь URI, связанные с прокси-сервером API. | ||
BasePath |
Обязательная строка, которая однозначно идентифицирует путь URI, используемый Apigee Edge для маршрутизации входящих сообщений к нужному прокси-серверу API. BasePath – это фрагмент URI (например, Использование подстановочного знака в базовых путях В базовых путях прокси-сервера API можно использовать один или несколько подстановочных знаков "*" Например, если базовый путь – Важно! Apigee НЕ поддерживает использование подстановочного знака "*" в качестве первого элемента базового пути. Например, следующий код НЕ поддерживается: |
/ | Да |
VirtualHost |
Связывает прокси-сервер API с определенными базовыми URL для среды. VirtualHost – это именованная конфигурация, которая определяет один или несколько URL для среды. Именованные виртуальные хосты, определенные для ProxyEndpoint, определяют домены и порты, в которых представлен прокси-сервер API, а также URL, которые приложения используют для вызова прокси-сервера API. По умолчанию для среды определяются два виртуальных хоста с именами: |
по умолчанию | Нет |
Properties |
Набор дополнительных настроек HTTP можно задать как свойства объекта <ProxyEndpoint>. |
Н/Д | Нет |
FaultRules |
Определяет, как ProxyEndpoint реагирует на ошибку. Правило ошибки содержит два элемента:
Подробнее о том, как обрабатывать ошибки… |
Н/Д | Нет |
DefaultFaultRule |
Обрабатывает любые ошибки (системные, транспортные, обмена сообщениями или правил), которые не обрабатываются другими правилами обработки ошибок. Подробнее о том, как обрабатывать ошибки… |
Н/Д | Нет |
RouteRule |
Определяет место назначения входящих запросов после обработки конвейером запросов ProxyEndpoint. Обычно RouteRule указывает на именованную конфигурацию TargetEndpoint, но может также указывать непосредственно на URL. | ||
Name |
Обязательный атрибут, который задает название для правила маршрута. В названии можно использовать только следующие символы: A-Za-z0-9._\-$ %. Например, Cat2 %_ – это полное имя. |
Н/Д | Да |
Condition |
Необязательное условное выражение, используемое для динамической маршрутизации во время выполнения. Условные правила маршрутизации полезны, например, для того, чтобы включить маршрутизацию на основе контента для поддержки управления версиями серверной части. | Н/Д | Нет |
TargetEndpoint |
Необязательная строка, которая идентифицирует именованную конфигурацию TargetEndpoint. Именованная целевая конечная точка – это любая целевая конечная точка, определенная в том же прокси-сервере API в каталоге Указав имя TargetEndpoint, вы сообщаете, куда следует пересылать сообщения запросов после обработки конвейером запросов ProxyEndpoint. Обратите внимание, что это необязательный параметр. ProxyEndpoint может напрямую вызывать URL. Например, ресурс JavaScript или Java, выполняющий роль HTTP-клиента, может выполнять основную функцию TargetEndpoint – пересылать запросы в бэкенд-службу. |
Н/Д | Нет |
| URL | Необязательная строка, определяющая исходящий сетевой адрес, вызываемый ProxyEndpoint, в обход любых конфигураций TargetEndpoint, которые могут храниться в /targets. |
Н/Д | Нет |
Как настроить RouteRules
Именованный TargetEndpoint относится к файлу конфигурации в каталоге /apiproxy/targets, в который RouteRule пересылает запрос после обработки ProxyEndpoint.
Например, следующее правило маршрутизации относится к конфигурации /apiproxy/targets/myTarget.xml:
<RouteRule name="default"> <TargetEndpoint>myTarget</TargetEndpoint> </RouteRule>
Прямой вызов URL
ProxyEndpoint также может напрямую вызывать бэкенд-службу. Прямой вызов URL обходит любую конфигурацию TargetEndpoints с именем в разделе /apiproxy/targets. По этой причине TargetEndpoint является необязательной конфигурацией прокси-сервера API, хотя на практике прямой вызов из ProxyEndpoint не рекомендуется.
Например, следующее правило маршрутизации выполняет вызов HTTP к http://api.mycompany.com/v2.
<RouteRule name="default"> <URL>http://api.mycompany.com/v2</URL> </RouteRule>
Условные маршруты
Правила маршрутизации можно объединять в цепочки, чтобы поддерживать динамическую маршрутизацию во время выполнения. Входящие запросы можно направлять в конфигурации TargetEndpoint с определенными именами, непосредственно в URL или в комбинацию этих двух вариантов на основе заголовков HTTP, содержимого сообщений, параметров запроса или контекстной информации, такой как время суток, местоположение и т. д.
Условные правила маршрутизации работают так же, как и другие условные операторы в Apigee Edge. Подробнее об условиях и переменных…
Например, следующая комбинация RouteRule сначала оценивает входящий запрос, чтобы проверить значение заголовка HTTP. Если в HTTP-заголовке routeTo указано значение TargetEndpoint1, запрос пересылается в TargetEndpoint с именем TargetEndpoint1. Если нет, входящий запрос пересылается в http://api.mycompany.com/v2.
<RouteRule name="MyRoute"> <Condition>request.header.routeTo = "TargetEndpoint1"</Condition> <TargetEndpoint>TargetEndpoint1</TargetEndpoint> </RouteRule> <RouteRule name="default"> <URL>http://api.mycompany.com/v2</URL> </RouteRule>
Нулевые маршруты
Правило маршрута со значением null можно определить для сценариев, в которых запрос не нужно пересылать в TargetEndpoint. Это полезно, когда ProxyEndpoint выполняет всю необходимую обработку, например с помощью JavaScript для вызова внешнего сервиса или получения данных из хранилища пар "ключ-значение" API Services.
Например, следующий код определяет нулевой маршрут:
<RouteRule name="GoNowhere"/>
Условные нулевые маршруты могут быть полезны. В следующем примере маршрут со значением null настроен на выполнение, когда HTTP-заголовок request.header.X-DoNothing имеет значение, отличное от null.
<RouteRule name="DoNothingOnDemand"> <Condition>request.header.X-DoNothing != null</Condition> </RouteRule>
Помните, что правила маршрутизации можно объединять в цепочки, поэтому условный нулевой маршрут обычно является одним из компонентов набора правил маршрутизации, предназначенных для поддержки условной маршрутизации.
Условный нулевой маршрут может быть полезен для кеширования. Используя значение переменной, заданное правилом Cache, вы можете настроить прокси-сервер API так, чтобы при показе записи из кеша выполнялся нулевой маршрут.
<RouteRule name="DoNothingUnlessTheCacheIsStale"> <Condition>lookupcache.LookupCache-1.cachehit is true</Condition> </RouteRule>
TargetEndpoint

TargetEndpoint – это исходящий эквивалент ProxyEndpoint. TargetEndpoint работает как клиент для бэкенд-службы или API: отправляет запросы и получает ответы.
У прокси-сервера API может не быть целевых конечных точек. Конечные точки прокси-сервера можно настроить так, чтобы они напрямую вызывали URL. Прокси-сервер API без TargetEndpoints обычно содержит ProxyEndpoint, который либо напрямую вызывает бэкенд-службу, либо настроен на вызов службы с помощью Java или JavaScript.
Конфигурация TargetEndpoint
/targets/default.xml
TargetEndpoint определяет исходящее подключение из Apigee Edge к другому сервису или ресурсу.
Пример конфигурации TargetEndpoint:
<TargetEndpoint name="default">
<PreFlow/>
<Flows/>
<PostFlow/>
<HTTPTargetConnection>
<URL>http://mocktarget.apigee.net</URL>
<SSLInfo/>
</HTTPTargetConnection>
<FaultRules/>
<DefaultFaultRule/>
<ScriptTarget/>
<LocalTargetConnection/>
</TargetEndpoint>Элементы конфигурации TargetEndpoint
TargetEndpoint может вызывать целевой сервис одним из следующих способов:
- HTTPTargetConnection для вызовов HTTP(S)
- LocalTargetConnection для цепочки локальных прокси-серверов
- ScriptTarget для вызовов скрипта Node.js, размещенного в Edge
В TargetEndpoint можно настроить только один из этих элементов.
| Название | Описание | По умолчанию | Обязательно? |
|---|---|---|---|
TargetEndpoint |
|||
name |
Название TargetEndpoint, которое должно быть уникальным в конфигурации прокси-сервера API. Название TargetEndpoint используется в ProxyEndpoint RouteRule для перенаправления запросов на исходящую обработку. В названии можно использовать только следующие символы: A-Za-z0-9._\-$ %. |
Н/Д | Да |
PreFlow |
Определяет правила в потоке PreFlow запроса или ответа. | Н/Д | Да |
Flows |
Определяет правила в условных потоках запроса или ответа.
|
Н/Д | Да |
PostFlow |
Определяет правила в потоке PostFlow запроса или ответа.
|
Н/Д | Да |
HTTPTargetConnection |
Вместе с дочерними элементами определяет доступ к ресурсу на сервере через HTTP. Если вы используете HTTPTargetConnection, не настраивайте другие типы целевых подключений (ScriptTarget или LocalTargetConnection). |
||
URL |
Определяет сетевой адрес бэкенд-службы, на который TargetEndpoint пересылает сообщения запросов. | Н/Д | Нет |
LoadBalancer |
Определяет одну или несколько конфигураций TargetServer с названиями. Именованные конфигурации TargetServer можно использовать для балансировки нагрузки, определяя два или более подключения к конечным точкам. Кроме того, TargetServer позволяет отделить конфигурации прокси-сервера API от URL конечных точек конкретных бэкенд-служб. |
Н/Д | Нет |
Properties |
Набор дополнительных настроек HTTP можно задать как свойства объекта <TargetEndpoint>. |
Н/Д | Нет |
SSLInfo |
При необходимости задайте настройки TLS/SSL в TargetEndpoint, чтобы управлять подключением TLS/SSL между прокси-сервером API и целевым сервисом. Подробнее о конфигурации TargetEndpoint для TLS/SSL… | Н/Д | Нет |
LocalTargetConnection |
Вместе с дочерними элементами указывает ресурс, к которому можно получить доступ локально, минуя сетевые характеристики, такие как балансировка нагрузки и обработчики сообщений.
Чтобы указать целевой ресурс, добавьте дочерний элемент APIProxy (с элементом ProxyEndpoint) или дочерний элемент Path. Подробнее о том, как объединять прокси API в цепочки… Если вы используете LocalTargetConnection, не настраивайте другие типы целевых подключений (HTTPTargetConnection или ScriptTarget). |
||
APIProxy |
Указывает название прокси-сервера API, который будет использоваться в качестве цели для запросов. Целевой прокси-сервер должен находиться в той же организации и среде, что и прокси-сервер, отправляющий запросы. Это альтернатива элементу "Путь". | Н/Д | Нет |
ProxyEndpoint |
Используется с APIProxy, чтобы указать название ProxyEndpoint целевого прокси. | Н/Д | Нет |
Path |
Указывает путь конечной точки прокси-сервера API, который будет использоваться в качестве цели для запросов. Целевой прокси-сервер должен находиться в той же организации и среде, что и прокси-сервер, отправляющий запросы. Это альтернатива использованию APIProxy. | Н/Д | Нет |
FaultRules |
Определяет, как TargetEndpoint реагирует на ошибку. Правило ошибки содержит два элемента:
Подробнее о том, как обрабатывать ошибки… |
Н/Д | Нет |
DefaultFaultRule |
Обрабатывает любые ошибки (системные, транспортные, обмена сообщениями или правил), которые не обрабатываются другими правилами FaultRule. Подробнее о том, как обрабатывать ошибки… |
Н/Д | Нет |
ScriptTarget |
|||
ResourceURL |
Определяет тип ресурса (узел) и название основного скрипта Node.js, который реализует функциональность TargetEndpoint.
Скрипт должен быть включен в файлы ресурсов прокси API. Подробнее о том, как добавить Node.js в существующий прокси-сервер API… Если вы используете ScriptTarget, не настраивайте другие типы целевых подключений (HTTPTargetConnection или LocalTargetConnection). |
Н/Д | Да |
EnvironmentVariable |
При необходимости передайте переменные среды в основной скрипт Node.js. Подробнее о поддержке модулей Node.js в Edge… |
Н/Д | Нет |
Arguments |
При необходимости передайте аргументы в основной скрипт Node.js. Подробнее о поддержке модулей Node.js в Edge… |
Н/Д | Нет |
Конфигурация TargetEndpoint для TLS/SSL
Конечным точкам часто приходится управлять подключениями HTTPS с разнородной инфраструктурой бэкэнда. Поэтому поддерживается ряд настроек конфигурации TLS/SSL.
TLS/SSL Элементы конфигурации TargetEndpoint
| Название | Описание | По умолчанию | Обязательно? |
|---|---|---|---|
SSLInfo |
|||
Enabled |
Указывает, включен ли для конечной точки протокол TLS/SSL.
Значение по умолчанию – true, если в <URL> указан протокол HTTPS, и false, если в <URL> указан протокол HTTP. |
true, если в <URL> указан протокол HTTPS; |
Нет |
TrustStore |
Хранилище ключей, содержащее доверенные сертификаты сервера. | Н/Д | Нет |
ClientAuthEnabled |
Настройка, которая включает исходящую аутентификацию клиента (двусторонний TLS/SSL) | false | Нет |
KeyStore |
Хранилище ключей, содержащее закрытые ключи, используемые для исходящей аутентификации клиента. | Н/Д | Да (если для ClientAuthEnabled задано значение true) |
KeyAlias |
Псевдоним закрытого ключа, используемого для исходящей аутентификации клиента. | Н/Д | Да (если для ClientAuthEnabled задано значение true) |
Ciphers |
Поддерживаемые шифры для исходящего трафика TLS/SSL. Если шифры не указаны, будут разрешены все шифры, доступные для JVM. Чтобы ограничить шифры, добавьте следующие элементы с перечислением поддерживаемых шифров: <Ciphers> <Cipher>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Cipher> <Cipher>TLS_RSA_WITH_DES_CBC_SHA</Cipher> </Ciphers> |
Н/Д | Нет |
Protocols |
Поддерживаемые протоколы для исходящего трафика TLS/SSL. Если протоколы не указаны, будут разрешены все протоколы, доступные для JVM. Чтобы ограничить протоколы, добавьте следующие элементы с указанием поддерживаемых протоколов: <Protocols> <Protocol>TLSv1.1</Protocol> <Protocol>TLSv1.2</Protocol> </Protocols> |
Н/Д | Нет |
CommonName |
Если указано, значение, по которому проверяется общее название целевого сертификата. Это значение действительно только для конфигураций TargetEndpoint и TargetServer. Она недействительна для конфигураций VirtualHost. По умолчанию указанное значение точно сопоставляется с общим названием целевого сертификата.
Например, если в качестве значения для <CommonName> используется При необходимости Apigee может выполнять сопоставление с подстановочными знаками, используя атрибут Например, стандартное имя, указанное как <CommonName wildcardMatch="true">*.myhost.com</CommonName> |
Н/Д | Нет |
Пример TargetEndpoint с включенной исходящей аутентификацией клиента
<TargetEndpoint name="default">
<HttpTargetConnection>
<URL>https://myservice.com</URL>
<SSLInfo>
<Enabled>true</Enabled>
<ClientAuthEnabled>true</ClientAuthEnabled>
<KeyStore>myKeystore</KeyStore>
<KeyAlias>myKey</KeyAlias>
<TrustStore>myTruststore</TrustStore>
</SSLInfo>
</HttpTargetConnection>
</TargetEndpoint>Подробные инструкции приведены в разделе Настройка TLS от Edge до внутреннего сервера (в облаке и частном облаке).
Использование переменных потока для динамической настройки значений TLS/SSL
Вы также можете динамически задавать сведения о TLS/SSL, чтобы поддерживать гибкие требования к среде выполнения. Например, если ваш прокси-сервер API подключается к двум потенциально разным целевым объектам (тестовому и рабочему), вы можете настроить программное обнаружение среды, в которой выполняется вызов, и динамически задавать ссылки на подходящее хранилище ключей и доверенное хранилище. В статье Dynamic SSLInfo for TargetEndpoint using variable reference (Динамическая информация SSL для TargetEndpoint с использованием ссылки на переменную) сообщества Apigee этот сценарий описан более подробно и приведены примеры развертываемых прокси API.
В следующем примере показано, как задать тег <SSLInfo> в конфигурации TargetEndpoint. Значения могут быть предоставлены во время выполнения, например с помощью вызова Java, правила JavaScript или правила "Назначить сообщение". Используйте переменные сообщений, которые содержат нужные вам значения.
Переменные можно использовать только в следующих элементах:
<SSLInfo> <Enabled>{myvars.ssl.enabled}</Enabled> <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled> <KeyStore>{myvars.ssl.keystore}</KeyStore> <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias> <TrustStore>{myvars.ssl.trustStore}</TrustStore> </SSLInfo>
Как использовать ссылки для динамической настройки значений TLS/SSL
При настройке TargetEndpoint, использующего HTTPS, необходимо учитывать случаи, когда срок действия сертификата TLS/SSL истекает или когда изменение конфигурации системы требует обновления сертификата. При установке Edge для частного облака при настройке TLS/SSL с использованием статических значений или переменных потока может потребоваться перезапустить процессоры сообщений.
Подробнее о том, как обновить сертификат TLS…
Однако вы можете настроить TargetEndpoint так, чтобы он использовал ссылку на хранилище ключей или доверенное хранилище. Преимущество использования ссылки заключается в том, что вы можете обновить ссылку, чтобы она указывала на другое хранилище ключей или доверенное хранилище, чтобы обновить сертификат TLS/SSL без необходимости перезапуска обработчиков сообщений.
Ниже приведен пример TargetEndpoint, в котором используется ссылка на хранилище ключей:
<SSLInfo>
<Enabled>true</Enabled>
<ClientAuthEnabled>false</ClientAuthEnabled>
<KeyStore>ref://keystoreref</KeyStore>
<KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>Чтобы создать ссылку с именем keystoreref, используйте следующий вызов API POST:
curl -X POST -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
-d '<ResourceReference name="keystoreref">
<Refers>myTestKeystore</Refers>
<ResourceType>KeyStore</ResourceType>
</ResourceReference>' -u email:passwordВ ссылке указано название хранилища ключей и его тип.
Чтобы посмотреть ссылку, используйте следующий вызов API GET:
curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:passwordЧтобы изменить ссылку на другое хранилище ключей, убедившись, что у псевдонима то же имя, используйте следующий вызов PUT:
curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \
-d '<ResourceReference name="keystoreref">
<Refers>myNewKeystore</Refers>
<ResourceType>KeyStore</ResourceType>
</ResourceReference>' -u email:passwordTargetEndpoint с целевой балансировкой нагрузки
TargetEndpoints поддерживает балансировку нагрузки между несколькими именованными TargetServer с помощью трех алгоритмов балансировки нагрузки.
Подробные инструкции приведены в статье Как настроить балансировку нагрузки между внутренними серверами.
Правила
Каталог /policies в прокси-сервере API содержит все правила, которые можно прикрепить к потокам в прокси-сервере API.
Элементы конфигурации правил
| Название | Описание | По умолчанию | Обязательно? |
|---|---|---|---|
Policy |
|||
name |
Внутреннее название правила. В названии можно использовать только следующие символы: При необходимости используйте элемент |
Н/Д | Да |
enabled |
Чтобы применить правило, задайте значение Установите значение |
true | Нет |
continueOnError |
Если задано значение Установите значение |
false | Нет |
async |
Примечание. Этот атрибут не приводит к асинхронному выполнению правила.
В большинстве случаев следует оставить значение по умолчанию – Если задано значение Чтобы использовать асинхронное поведение в прокси API, ознакомьтесь с объектной моделью JavaScript. |
false | Нет |
Прикрепленный файл: правила
На изображении ниже показана последовательность выполнения потоков прокси-сервера API:

Как показано выше:
Правила прикрепляются к потокам в качестве шагов обработки. Название правила используется для ссылки на правило, которое должно применяться в качестве шага обработки. Прикрепленный файл с правилами должен иметь следующий формат:
<Step><Name>MyPolicy</Name></Step>
Правила применяются в том порядке, в котором они прикреплены к потоку. Пример:
<Step><Name>FirstPolicy</Name></Step> <Step><Name>SecondPolicy</Name></Step>
Элементы конфигурации прикрепления правил
| Название | Описание | По умолчанию | Обязательно? |
|---|---|---|---|
Step |
|||
Name |
Название правила, которое будет выполняться в соответствии с определением этого шага. | Н/Д | Да |
Condition |
Условное выражение, определяющее, применяется ли правило. Если с правилом связано условие, оно выполняется только в том случае, если условное выражение имеет значение true. | Н/Д | Нет |
Процессы
ProxyEndpoint и TargetEndpoint определяют конвейер для обработки запросов и ответов. Конвейер обработки состоит из потока запросов и потока ответов. Каждый поток запроса и поток ответа подразделяется на PreFlow, один или несколько необязательных условных или именованных потоков и PostFlow.
- PreFlow: выполняется всегда. Выполняется до любых условных потоков.
- PostFlow: выполняется всегда. Выполняется после всех условных потоков.
Кроме того, вы можете добавить в ProxyEndpoint поток PostClientFlow, который выполняется после того, как ответ возвращается в клиентское приложение, отправившее запрос. К этому потоку можно прикрепить только правило MessageLogging и расширение Google Stackdriver Logging. PostClientFlow снижает задержку прокси-сервера API и делает доступной для ведения журналов информацию, которая рассчитывается только после того, как ответ возвращается клиенту, например client.sent.start.timestamp и client.sent.end.timestamp.Этот поток используется в основном для измерения временного интервала между временными метками начала и окончания сообщения ответа.
Посмотрите короткое видео
Видео. Посмотрите короткое видео о том, как использовать ведение журнала сообщений в PostClientFlow.
Ниже приведен пример PostClientFlow с прикрепленными правилами ведения журнала сообщений.
...
<PostFlow name="PostFlow">
<Request/>
<Response/>
</PostFlow>
<PostClientFlow>
<Request/>
<Response>
<Step>
<Name>Message-Logging-1</Name>
</Step>
</Response>
</PostClientFlow>
...Конвейер обработки прокси-сервера API выполняет потоки в следующем порядке:
Конвейер запросов:
- Proxy Request PreFlow
- Процессы с условиями для запросов прокси-сервера (необязательно)
- Proxy Request PostFlow
- Target Request PreFlow
- Целевые условные потоки запросов (необязательно)
- Target Request PostFlow
Конвейер ответов:
- Target Response PreFlow
- Целевые процессы с условиями для ответов (необязательно)
- Целевой ответ PostFlow
- Proxy Response PreFlow
- Условные процессы ответа прокси-сервера (необязательно)
- Proxy Response PostFlow
- Ответ PostClientFlow (необязательно)
В конфигурациях ProxyEndpoint или TargetEndpoint необходимо настроить только те потоки, к которым прикреплены правила. PreFlow и PostFlow нужно указывать в конфигурации ProxyEndpoint или TargetEndpoint только в том случае, если правило должно применяться во время обработки PreFlow или PostFlow.
В отличие от условных потоков, порядок элементов PreFlow и PostFlow не имеет значения – прокси-сервер API всегда будет выполнять каждый из них в нужный момент конвейера, независимо от того, где они указаны в конфигурации конечной точки.
Процессы с условиями
ProxyEndpoint и TargetEndpoint поддерживают неограниченное количество условных потоков (также известных как именованные потоки).
Прокси-сервер API проверяет условие, указанное в условном потоке, и, если оно выполняется, прокси-сервер API выполняет шаги обработки в условном потоке. Если условие не выполняется, шаги обработки в условном потоке пропускаются. Условные потоки оцениваются в порядке, определенном в прокси-сервере API, и выполняется первый поток, условие которого соблюдено.
Определив условные потоки, вы сможете применять шаги обработки в прокси-сервере API на основе:
- URI запроса
- Глагол HTTP (GET, PUT, POST, DELETE)
- Значение параметра запроса, заголовка и параметра формы
- другие типы условий.
Например, в условном потоке ниже указано, что он выполняется только в том случае, если путь к ресурсу запроса – /accesstoken. Любой входящий запрос с путем /accesstoken приводит к выполнению этого процесса, а также любых правил, прикрепленных к нему. Если путь запроса не включает суффикс /accesstoken, поток не выполняется (хотя может выполниться другой условный поток).
<Flows>
<Flow name="TokenEndpoint">
<Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition>
<Request>
<Step>
<Name>GenerateAccessToken</Name>
</Step>
</Request>
</Flow>
</Flows>Элементы конфигурации процесса
| Название | Описание | По умолчанию | Обязательно? |
|---|---|---|---|
Flow |
Конвейер обработки запросов или ответов, определенный в ProxyEndpoint или TargetEndpoint | ||
Name |
Уникальное название потока. | Н/Д | Да |
Condition |
Условное выражение, которое оценивает одну или несколько переменных и возвращает значение True или False. Для всех потоков, кроме предопределенных PreFlow и PostFlow, необходимо задать условие выполнения. | Н/Д | Да |
Request |
Конвейер, связанный с обработкой сообщения Request. | Н/Д | Нет |
Response |
Конвейер, связанный с обработкой сообщения Response | Н/Д | Нет |
Обработка шагов
Последовательность условных потоков обеспечивается Apigee Edge. Условные потоки выполняются сверху вниз. Выполняется первый условный процесс, условие которого оценивается как true. Выполняется только один условный процесс.
Например, в приведенной ниже конфигурации потока любой входящий запрос, который не включает суффикс пути /first или /second, приведет к выполнению ThirdFlow, обеспечивая соблюдение правила Return404.
<Flows>
<Flow name="FirstFlow">
<Condition>proxy.pathsuffix MatchesPath "/first"</Condition>
<Request>
<Step><Name>FirstPolicy</Name></Step>
</Request>
</Flow>
<Flow name="SecondFlow">
<Condition>proxy.pathsuffix MatchesPath "/second"</Condition>
<Request>
<Step><Name>FirstPolicy</Name></Step>
<Step><Name>SecondPolicy</Name></Step>
</Request>
</Flow>
<Flow name="ThirdFlow">
<Request>
<Step><Name>Return404</Name></Step>
</Request>
</Flow>
</Flows>Ресурсы
Ресурсы (файлы ресурсов для использования в прокси API) – это скрипты, код и преобразования XSL, которые можно прикрепить к потокам с помощью правил. Они будут показаны в разделе "Скрипты" редактора прокси API в интерфейсе управления.
Поддерживаемые типы ресурсов перечислены в разделе Файлы ресурсов.
Ресурсы можно хранить в прокси-сервере API, среде или организации. В каждом случае ресурс упоминается в правиле по имени. Сервисы API разрешают имя, переходя от прокси API к среде и затем к уровню организации.
На ресурс, хранящийся на уровне организации, могут ссылаться правила в любой среде. На ресурс, хранящийся на уровне среды, могут ссылаться правила в этой среде. На ресурс, хранящийся на уровне прокси-сервера API, могут ссылаться только правила в этом прокси-сервере API.