Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Как разработчик, работающий с Apigee Edge, ваша основная деятельность по разработке включает настройку прокси-серверов API, которые функционируют как прокси-серверы для API или серверных служб. Этот документ представляет собой справочник по всем элементам конфигурации, доступным вам при создании прокси-серверов API.
Если вы учитесь создавать прокси-серверы API, рекомендуется начать с темы Создание простого прокси-сервера API .
Наиболее распространенные способы редактирования конфигураций прокси:
- Использование редактора XML в пользовательском интерфейсе Edge
- Загрузите конфигурацию и отредактируйте ее локально, как описано в разделе Локальная разработка конфигураций прокси .
Локальная разработка конфигураций прокси
Вы можете загрузить конфигурации прокси-сервера и редактировать их на локальном компьютере. Когда вы закончите, вы загрузите результаты в Edge. Этот подход позволяет интегрировать конфигурации прокси-сервера в систему управления версиями, управление версиями и другие общие рабочие процессы. Кроме того, работая над конфигурацией прокси-сервера локально, вы можете использовать собственный редактор XML и инструменты проверки.
В этом разделе описывается, как использовать пользовательский интерфейс для загрузки существующей конфигурации прокси-сервера, ее редактирования и последующей загрузки обратно в Edge для развертывания. Вы также можете использовать apigeetool для загрузки и развертывания новой конфигурации прокси-сервера (с помощью команд fetchproxy
и deployproxy
соответственно).
Чтобы изменить конфигурацию прокси-сервера локально с помощью пользовательского интерфейса:
- Загрузите текущую конфигурацию прокси-сервера в пользовательском интерфейсе Edge. (В представлении «Прокси API» выберите «Проект» > «Загрузить версию» .)
- На локальном компьютере создайте новый каталог и разверните в него загруженный 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» выберите «Проект» > «Загрузить новую версию» .)
Если вы получаете сообщение об ошибке, например: Bundle is invalid. Empty bundle. , затем убедитесь, что каталог верхнего уровня вашего ZIP-файла —
/apiproxy
. Если это не так, повторно заархивируйте файлы конфигурации прокси-сервера из корня расширенного каталога.После загрузки новой конфигурации прокси-сервера Edge увеличивает номер версии и отображает его в представлении «Сводка редакций» .
Edge не развертывает новую версию после того, как вы загрузите ее с помощью пользовательского интерфейса.
- Разверните новую версию.
Для получения дополнительной информации см . Учебное пособие: Как загрузить прокси-сервер с помощью пользовательского интерфейса и API управления в сообществе Apigee .
Структура прокси API
Прокси API состоит из следующей конфигурации:
Базовая конфигурация | Основные параметры конфигурации прокси-сервера API. См. базовую конфигурацию. |
Конфигурация прокси-конечной точки | Настройки входящего HTTP-соединения (от запроса приложений к Apigee Edge), потоков запросов и ответов, а также вложений политик. См. ПроксиЭндпойнт . |
Конфигурация целевой конечной точки | Настройки исходящего 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 и majorVersion 0. Этот параметр можно использовать в будущем, чтобы обеспечить развитие формата прокси-сервера API. | 4.0 | Нет |
Description | Текстовое описание прокси API. Если оно предоставлено, описание будет отображаться в пользовательском интерфейсе управления Edge. | Н/Д | Нет |
DisplayName | Понятное имя, которое может отличаться от атрибута name конфигурации прокси-сервера API. | Н/Д | Нет |
Policies | Список политик в каталоге /policies этого прокси API. Обычно вы увидите этот элемент только в том случае, если прокси-сервер API был создан с использованием пользовательского интерфейса управления Edge. Это просто параметр «манифеста», предназначенный для обеспечения видимости содержимого прокси-сервера API. | Н/Д | Нет |
ProxyEndpoints | Список ProxyEndpoints в каталоге /proxies этого прокси API. Обычно вы увидите этот элемент только в том случае, если прокси-сервер API был создан с использованием пользовательского интерфейса управления Edge. Это просто параметр «манифеста», предназначенный для обеспечения видимости содержимого прокси-сервера API. | Н/Д | Нет |
Resources | Список ресурсов (JavaScript, Python, Java, XSLT) в каталоге /resources этого прокси API. Обычно вы увидите этот элемент только в том случае, если прокси-сервер API был создан с использованием пользовательского интерфейса управления Edge. Это просто параметр «манифеста», предназначенный для обеспечения видимости содержимого прокси-сервера API. | Н/Д | Нет |
Spec | Идентифицирует спецификацию OpenAPI, связанную с прокси-сервером API. В качестве значения устанавливается URL-адрес или путь в хранилище спецификаций. Примечание . Хранилище спецификаций доступно только в версии New Edge. Дополнительные сведения о хранилище спецификаций см. в разделе Управление спецификациями и обмен ими . | Н/Д | Нет |
TargetServers | Список TargetServers, на которые ссылаются любые TargetEndpoints этого прокси API. Обычно вы увидите этот элемент только в том случае, если прокси-сервер API был создан с использованием пользовательского интерфейса управления Edge. Это просто параметр «манифеста», предназначенный для обеспечения видимости содержимого прокси-сервера API. | Н/Д | Нет |
TargetEndpoints | Список TargetEndpoints в каталоге /targets этого прокси API. Обычно вы увидите этот элемент только в том случае, если прокси-сервер API был создан с использованием пользовательского интерфейса управления Edge. Это просто параметр «манифеста», предназначенный для обеспечения видимости содержимого прокси-сервера API. | Н/Д | Нет |
ПроксиКонечная точка
На следующем изображении показан поток запросов/ответов:
/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, если (в редких случаях) определено несколько ProxyEndpoints. В имени разрешено использовать следующие символы: 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-адресов среды. Именованные VirtualHosts, определенные для ProxyEndpoint, определяют домены и порты, на которых предоставляется прокси-сервер API, и, как следствие, URL-адрес, который приложения используют для вызова прокси-сервера API. По умолчанию для среды определены два именованных VirtualHosts: | по умолчанию | Нет |
Properties | Набор дополнительных параметров конфигурации HTTP можно определить как свойства <ProxyEndpoint> . | Н/Д | Нет |
FaultRules | Определяет, как ProxyEndpoint реагирует на ошибку. Правило сбоя определяет два элемента:
См. Обработка ошибок . | Н/Д | Нет |
DefaultFaultRule | Обрабатывает любые ошибки (системные, транспортные, сообщения или политики), которые явно не обрабатываются другим правилом сбоя. См. Обработка ошибок . | Н/Д | Нет |
RouteRule | Определяет место назначения входящих сообщений запроса после обработки конвейером запросов ProxyEndpoint. Обычно RouteRule указывает на именованную конфигурацию TargetEndpoint, но он также может указывать непосредственно на URL-адрес. | ||
Name | Обязательный атрибут, предоставляющий имя RouteRule. В имени разрешено использовать следующие символы: A-Za-z0-9._\-$ % . Например, Cat2 %_ — это официальное имя. | Н/Д | Да |
Condition | Необязательный условный оператор, используемый для динамической маршрутизации во время выполнения. Условные RouteRules полезны, например, для включения маршрутизации на основе контента для поддержки управления версиями серверной части. | Н/Д | Нет |
TargetEndpoint | Необязательная строка, идентифицирующая именованную конфигурацию TargetEndpoint. Именованная TargetEndpoint — это любая TargetEndpoint, определенная в том же прокси-сервере API в каталоге Называя TargetEndpoint, вы указываете, куда должны пересылаться сообщения запроса после обработки конвейером запросов ProxyEndpoint. Обратите внимание, что это необязательная настройка. ProxyEndpoint может напрямую вызывать URL-адрес. Например, ресурс JavaScript или Java, функционирующий в роли HTTP-клиента, может выполнять основную функцию TargetEndpoint, то есть перенаправлять запросы к серверной службе. | Н/Д | Нет |
URL-адрес | Необязательная строка, определяющая исходящий сетевой адрес, вызываемый ProxyEndpoint, в обход любых конфигураций TargetEndpoint, которые могут храниться в /targets | Н/Д | Нет |
Как настроить RouteRules
Именованная TargetEndpoint относится к файлу конфигурации в каталоге /apiproxy/targets
, в который RouteRule перенаправляет запрос после обработки ProxyEndpoint.
Например, следующее RouteRule относится к конфигурации /apiproxy/targets/myTarget.xml
:
<RouteRule name="default"> <TargetEndpoint>myTarget</TargetEndpoint> </RouteRule>
Прямой вызов URL-адреса
ProxyEndpoint также может напрямую вызывать серверную службу. Прямой вызов URL-адреса обходит любую именованную конфигурацию TargetEndpoints в /apiproxy/targets
). По этой причине TargetEndpoint является дополнительной конфигурацией прокси-сервера API, хотя на практике прямой вызов из ProxyEndpoint не рекомендуется.
Например, следующий RouteRule выполняет HTTP-вызов http://api.mycompany.com/v2
.
<RouteRule name="default"> <URL>http://api.mycompany.com/v2</URL> </RouteRule>
Условные маршруты
RouteRules можно объединять в цепочку для поддержки динамической маршрутизации во время выполнения. Входящие запросы могут направляться в именованные конфигурации 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>
Нулевые маршруты
Можно определить нулевое RouteRule для поддержки сценариев, в которых сообщение запроса не нужно пересылать в TargetEndpoint. Это полезно, когда ProxyEndpoint выполняет всю необходимую обработку, например, используя JavaScript для вызова внешней службы или получения данных в результате поиска в хранилище ключей и значений служб API.
Например, следующее определяет нулевой маршрут:
<RouteRule name="GoNowhere"/>
Условные нулевые маршруты могут быть полезны. В следующем примере нулевой маршрут настроен на выполнение, когда HTTP-заголовок request.header.X-DoNothing
имеет значение, отличное от null
.
<RouteRule name="DoNothingOnDemand"> <Condition>request.header.X-DoNothing != null</Condition> </RouteRule>
Помните, что RouteRules могут быть связаны в цепочку, поэтому условный нулевой Route обычно является одним из компонентов набора RouteRules, предназначенного для поддержки условной маршрутизации.
Практическое использование условного нулевого маршрута будет способствовать кэшированию. Используя значение переменной, установленной политикой кэша, вы можете настроить прокси-сервер API для выполнения нулевого маршрута, когда запись обслуживается из кэша.
<RouteRule name="DoNothingUnlessTheCacheIsStale"> <Condition>lookupcache.LookupCache-1.cachehit is true</Condition> </RouteRule>
Целевая конечная точка
TargetEndpoint — это исходящий эквивалент ProxyEndpoint. TargetEndpoint действует как клиент серверной службы или API — он отправляет запросы и получает ответы.
Прокси-сервер API не обязательно должен иметь TargetEndpoints. ProxyEndpoints можно настроить для прямого вызова URL-адресов. Прокси-сервер API без TargetEndpoints обычно содержит ProxyEndpoint, который либо напрямую вызывает серверную службу, либо настроен для вызова службы с использованием Java или JavaScript.
Конфигурация целевой конечной точки
/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 можно использовать для балансировки нагрузки, определяя 2 или более подключения конфигурации конечной точки. Вы также можете использовать TargetServers для отделения конфигураций прокси-сервера API от URL-адресов конечных точек конкретных серверных служб. | Н/Д | Нет |
Properties | Набор дополнительных параметров конфигурации HTTP можно определить как свойства <TargetEndpoint> . | Н/Д | Нет |
SSLInfo | При необходимости определите параметры TLS/SSL на TargetEndpoint, чтобы управлять соединением TLS/SSL между прокси-сервером API и целевой службой. См. Конфигурация TLS/SSL TargetEndpoint . | Н/Д | Нет |
LocalTargetConnection | С помощью своих дочерних элементов указывает ресурс, к которому необходимо получить доступ локально, минуя сетевые характеристики, такие как балансировка нагрузки и процессоры сообщений. Чтобы указать целевой ресурс, включите либо дочерний элемент APIProxy (с элементом ProxyEndpoint), либо дочерний элемент Path. Дополнительную информацию см. в разделе Объединение прокси-серверов API в цепочку . Если вы используете LocalTargetConnection, не настраивайте другие типы целевых подключений (HTTPTargetConnection или ScriptTarget). | ||
APIProxy | Указывает имя прокси-сервера API, который будет использоваться в качестве цели для запросов. Целевой прокси-сервер должен находиться в той же организации и среде, что и прокси-сервер, отправляющий запросы. Это альтернатива использованию элемента Path. | Н/Д | Нет |
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. См. раздел Общие сведения о поддержке Edge для модулей Node.js. | Н/Д | Нет |
Arguments | При необходимости передайте аргументы в основной скрипт Node.js. См. раздел Общие сведения о поддержке Edge для модулей Node.js. | Н/Д | Нет |
Конфигурация TLS/SSL TargetEndpoint
TargetEndpoints часто требуется управлять HTTPS-соединениями с гетерогенной внутренней инфраструктурой. По этой причине поддерживается ряд параметров конфигурации TLS/SSL.
Элементы конфигурации TLS/SSL TargetEndpoint
Имя | Описание | По умолчанию | Необходимый? |
---|---|---|---|
SSLInfo | |||
Enabled | Указывает, включен ли TLS/SSL для конечной точки. Значение по умолчанию — true , если <URL> указывает протокол HTTPS, и false , если <URL> указывает HTTP. | true, если <URL> указывает HTTPS | Нет |
TrustStore | Хранилище ключей, содержащее сертификаты доверенного сервера. | Н/Д | Нет |
ClientAuthEnabled | Параметр, включающий исходящую аутентификацию клиента (двусторонний TLS/SSL). | ЛОЖЬ | Нет |
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. По умолчанию указанное значение точно соответствует общему имени целевого сертификата. Например, использование При желании 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 программно определять, какую среду он вызывает, и динамически устанавливать ссылки на соответствующее хранилище ключей и хранилище доверенных сертификатов. В следующей статье сообщества Apigee этот сценарий объясняется более подробно и приводятся примеры развертываемых прокси-серверов API: https://community.apigee.com/articles/21424/dynamic-sslinfo-for-targetendpoint-using-variable.html .
В следующем примере установки тега <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>
Используйте следующий вызов POST API, чтобы создать ссылку с именем keystoreref :
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
В ссылке указывается имя хранилища ключей и его тип.
Чтобы просмотреть ссылку, используйте следующий вызов GET API:
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:password
TargetEndpoint с целевой балансировкой нагрузки
TargetEndpoints поддерживает балансировку нагрузки между несколькими именованными серверами TargetServer с использованием трех алгоритмов балансировки нагрузки.
Подробные инструкции см. в разделе Балансировка нагрузки между внутренними серверами .
Политика
Каталог /policies
в прокси-сервере API содержит все политики, доступные для прикрепления к потокам в прокси-сервере API.
Элементы конфигурации политики
Имя | Описание | По умолчанию | Необходимый? |
---|---|---|---|
Policy | |||
name | Внутреннее имя политики. В имени можно использовать следующие символы: При необходимости используйте элемент | Н/Д | Да |
enabled | Установите значение Установите значение | истинный | Нет |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Нет |
async | Примечание . Этот атрибут не обеспечивает асинхронное выполнение политики. В большинстве случаев оставьте значение по умолчанию Если установлено значение Чтобы использовать асинхронное поведение в прокси-серверах API, см. Объектную модель JavaScript . | ЛОЖЬ | Нет |
Приложение к политике
На следующем изображении показана последовательность выполнения потоков прокси-сервера API:
Как показано выше:
Политики прикрепляются к Flows как этапы обработки. Имя политики используется для ссылки на политику, которая будет применяться в качестве шага обработки. Формат приложения к политике следующий:
<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: всегда выполняется. Выполняется после любых условных потоков.
Кроме того, вы можете добавить PostClientFlow в ProxyEndpoint, который выполняется после возврата ответа запрашивающему клиентскому приложению. К этому потоку можно прикрепить только политику MessageLogging и расширение ведения журнала Google Stackdriver . 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 выполняет потоки в следующей последовательности:
Конвейер запросов:
- Прокси-запрос PreFlow
- Условные потоки запроса прокси (необязательно)
- PostFlow запроса прокси
- Целевой запрос PreFlow
- Условные потоки целевого запроса (необязательно)
- Постфлоу целевого запроса
Канал ответа:
- Целевой ответ PreFlow
- Условные потоки целевого ответа (необязательно)
- Целевой ответ после потока
- PreFlow ответа прокси
- Условные потоки ответа прокси (необязательно)
- PostFlow ответа прокси
- Ответ PostClientFlow (необязательно)
Только те потоки с прикрепленными политиками необходимо настроить в конфигурациях ProxyEndpoint или TargetEndpoint. PreFlow и PostFlow необходимо указывать в конфигурации ProxyEndpoint или TargetEndpoint только в том случае, если необходимо применить политику во время обработки PreFlow или PostFlow.
В отличие от условных потоков, порядок элементов PreFlow и PostFlow не важен — прокси API всегда будет выполнять каждый из них в соответствующей точке конвейера, независимо от того, где они появляются в конфигурации конечной точки.
Условные потоки
ProxyEndpoints и TargetEndpoints поддерживают неограниченное количество условных потоков (также известных как «именованные потоки»).
Прокси-сервер API проверяет условие, указанное в условном потоке, и, если условие выполняется, этапы обработки в условном потоке выполняются прокси-сервером API. Если условие не выполняется, то этапы обработки в условном потоке пропускаются. Условные потоки оцениваются в порядке, определенном в прокси -сервере API, и первое, чье состояние выполнено.
Определяя условные потоки, вы получаете возможность применения этапов обработки в прокси API на основе:
- Запрос URI
- Http глагол (get/pot/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 | Условное утверждение, которое оценивает или более переменных, чтобы оценить истинную или неверную. Все потоки, отличные от предопределенных типов префального и постфтоуда, должны определить условие для их выполнения. | Н/Д | Да |
Request | Трубопровод, связанный с обработкой сообщений запроса | Н/Д | Нет |
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.