Справочник по настройке прокси-сервера API

Вы просматриваете документацию Apigee Edge .
Перейти к документации Apigee X.
info

Как разработчик, работающий с Apigee Edge, вы в первую очередь занимаетесь настройкой API-прокси, которые выполняют функции прокси для API или внутренних сервисов. Этот документ содержит справочные данные по всем элементам конфигурации, доступным вам при создании API-прокси.

Если вы изучаете, как создавать прокси-серверы API, рекомендуется начать с темы Создание простого прокси-сервера API .

Наиболее распространенные способы редактирования конфигураций прокси-сервера:

Локальная разработка конфигураций прокси

Вы можете загрузить конфигурации прокси-сервера, чтобы редактировать их на локальном компьютере. После этого вы загрузите результаты в Edge. Такой подход позволяет интегрировать конфигурации прокси-сервера в систему управления версиями, систему управления версиями и другие общие рабочие процессы. Кроме того, работая с конфигурацией прокси-сервера локально, вы можете использовать собственный XML-редактор и инструменты проверки.

В этом разделе описывается, как использовать пользовательский интерфейс для загрузки существующей конфигурации прокси-сервера, её редактирования и последующей загрузки обратно в Edge для развёртывания. Вы также можете использовать apigeetool для загрузки и развёртывания новой конфигурации прокси-сервера (с помощью команд fetchproxy и deployproxy соответственно).

Чтобы изменить конфигурацию прокси-сервера локально с помощью пользовательского интерфейса:

  1. Загрузите текущую конфигурацию прокси-сервера в пользовательском интерфейсе Edge. (В представлении «Прокси-серверы API» выберите «Проект» > «Загрузить версию »).
  2. На локальном компьютере создайте новый каталог и распакуйте в него загруженный ZIP-файл.

    Чтобы разархивировать ZIP-файл, можно воспользоваться такой утилитой, как unzip , как показано в следующем примере:

    mkdir myappdir
    unzip ./my-app_app_rev3_2019_04_20.zip -d myappdir

    Развернутое содержимое ZIP-файла должно быть похоже на структуру, описанную в разделе Структура прокси API .

  3. При необходимости отредактируйте исходные файлы. Описание исходных файлов в конфигурации прокси-сервера см. в разделе Файлы конфигурации и структура каталогов прокси-сервера API .

    Например, чтобы включить мониторинг работоспособности вашего API-прокси, отредактируйте файл конфигурации TargetEndpoint в каталоге /apiproxy/targets/ . Файл по умолчанию в этом каталоге — default.xml , хотя при использовании условных целей могут быть файлы с другими именами.

    В этом случае, если файл конфигурации TargetEndpoint и его каталог не существуют, создайте их.

  4. После завершения редактирования файлов конфигурации прокси-сервера обязательно сохраните изменения.
  5. Перейдите в новый каталог, который вы создали при развертывании ZIP-файлов (корень развернутых файлов конфигурации).

    Например, если вы развернули файлы в каталоге /myappdir , перейдите в этот каталог, как показано в следующем примере:

    cd myappdir

    Перед повторной архивацией файлов конфигурации прокси-сервера перейдите в этот каталог, поскольку каталог /myappdir не должен быть включён в ZIP-файл. Верхним каталогом в ZIP-файле должен быть /apiproxy .

  6. Переархивируйте файлы конфигурации прокси-сервера, включая новые или изменённые. Для этого можно использовать утилиту, например zip , как показано в следующем примере:
    zip my-new-proxy.zip -r .

    Каталог верхнего уровня в ZIP-файле должен быть /apiproxy .

    Особых требований к имени ZIP-файла нет. Например, не нужно увеличивать номер версии или указывать дату в имени файла, но это может быть полезно для отладки или управления исходным кодом.

    Edge увеличивает номер версии новой конфигурации прокси-сервера при ее загрузке.

  7. Загрузите новую конфигурацию прокси-сервера с помощью пользовательского интерфейса Edge. (В представлении «Прокси-серверы API» выберите «Проект» > «Загрузить новую версию »).

    Если вы получили ошибку типа Bundle is invalid. Empty bundle. , убедитесь, что корневой каталог ZIP-файла — /apiproxy . Если это не так, переархивируйте файлы конфигурации прокси-сервера из корня расширенного каталога.

    После загрузки новой конфигурации прокси-сервера Edge увеличивает номер ревизии и отображает его в представлении «Сводка ревизий» .

    Edge не развертывает новую версию после ее загрузки с помощью пользовательского интерфейса.

  8. Разверните новую версию.

Для получения дополнительной информации см. Учебное пособие: Как загрузить прокси с помощью пользовательского интерфейса и API управления в сообществе Apigee .

Структура API-прокси

API-прокси состоит из следующей конфигурации:

Базовая конфигурация Основные параметры конфигурации API-прокси. См. раздел «Базовая конфигурация».
Конфигурация ProxyEndpoint Настройки входящего HTTP-подключения (от запрашивающих приложений к Apigee Edge), потоков запросов и ответов, а также вложений политик. См. ProxyEndpoint .
Конфигурация целевой конечной точки Настройки исходящего HTTP-подключения (от Apigee Edge к бэкэнд-сервису), потоков запросов и ответов, а также вложений политик. См. TargetEndpoint.
Потоки Конвейеры запросов и ответов ProxyEndpoint и TargetEndpoint, к которым можно прикреплять политики. См. раздел «Потоки» .
Политики Файлы конфигурации в формате XML, соответствующие схемам политик Apigee Edge. См. раздел «Политики» .
Ресурсы Скрипты, JAR-файлы и XSLT-файлы, используемые политиками для выполнения пользовательской логики. См. раздел «Ресурсы» .

Структура и содержимое каталога прокси API

Компоненты в таблице выше определяются файлами конфигурации в следующей структуре каталогов:

Показывает структуру каталогов, в которых apiproxy является корневым. Непосредственно под каталогом apiproxy находятся каталоги политик, прокси, ресурсов и целей, а также файл weatherapi.xml.

Конфигурационные файлы и структура каталогов 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-адрес или путь в хранилище спецификаций.

Примечание : Хранилище спецификаций доступно только в версии New Edge. Подробнее о хранилище спецификаций см. в разделе Управление спецификациями и общий доступ к ним .
Н/Д Нет
TargetServers Список целевых серверов (TargetServers), на которые ссылаются все конечные точки (TargetEndpoints) этого прокси-API. Обычно этот элемент отображается только при создании прокси-API с помощью интерфейса управления Edge. Это просто «манифестная» настройка, предназначенная для обеспечения видимости содержимого прокси-API. Н/Д Нет
TargetEndpoints Список конечных точек TargetEndpoint в каталоге /targets этого прокси-сервера API. Обычно этот элемент отображается только при создании прокси-сервера API с помощью интерфейса управления Edge. Это просто «манифестный» параметр, предназначенный для обеспечения видимости содержимого прокси-сервера API. Н/Д Нет

ProxyEndpoint

На следующем рисунке показан поток запросов/ответов:

Показывает, как клиент вызывает HTTP-сервис. Запрос проходит через конечную точку прокси-сервера, а затем через целевую конечную точку, прежде чем будет обработан HTTP-сервисом. Ответ проходит через целевую конечную точку, а затем через конечную точку прокси-сервера, прежде чем будет возвращен клиенту.

/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 (например /weather ), добавленный к базовому URL-адресу прокси-сервера API (например, http://apifactory-test.apigee.net ). BasePath должен быть уникальным в пределах среды. Уникальность проверяется при создании или импорте прокси-сервера API.

Использование подстановочных знаков в базовых путях

В базовых путях API-прокси можно использовать один или несколько подстановочных знаков «*». Например, базовый путь /team/*/members позволяет клиентам вызывать https://[host]/team/ blue /members и https://[host]/team/ green /members без необходимости создания новых API-прокси для поддержки новых команд. Обратите внимание, что /**/ не поддерживается.

Важно: Apigee НЕ поддерживает использование подстановочного знака «*» в качестве первого элемента базового пути. Например, НЕ поддерживается: /*/search . Начало базового пути с «*» может привести к непредвиденным ошибкам из-за особенностей определения Edge допустимых путей.

/ Да
VirtualHost

Связывает прокси-сервер API с определёнными базовыми URL-адресами для среды. VirtualHost — это именованная конфигурация, которая определяет один или несколько URL-адресов для среды.

Именованные VirtualHosts, определенные для ProxyEndpoint, определяют домены и порты, на которых предоставляется прокси-API, и, как расширение, URL-адрес, который приложения используют для вызова прокси-API.

По умолчанию для среды определены два именованных VirtualHost: default и secure . Организация также может определить собственные домены. Например, чтобы обеспечить доступность прокси-сервера API только по протоколу HTTPS, установите для VirtualHost в HTTPProxyConnection значение secure .

по умолчанию Нет
Properties Набор дополнительных параметров конфигурации HTTP можно определить как свойства <ProxyEndpoint> . Н/Д Нет
FaultRules
Определяет реакцию ProxyEndpoint на ошибку. Правило обработки ошибки включает два элемента:
  • Условие, которое определяет неисправность, которую необходимо обработать, на основе предварительно определенной категории, подкатегории или имени неисправности.
  • Одна или несколько политик, которые определяют поведение правила ошибки для соответствующего состояния.

См. раздел Устранение неисправностей .

Н/Д Нет
DefaultFaultRule

Обрабатывает любые ошибки (системные, транспортные, обмена сообщениями или политики), которые явно не обрабатываются другим правилом обработки ошибок.

См. раздел Устранение неисправностей .

Н/Д Нет
RouteRule Определяет пункт назначения входящих запросов после обработки конвейером запросов ProxyEndpoint. Обычно RouteRule указывает на именованную конфигурацию TargetEndpoint, но может также указывать непосредственно на URL.
Name Обязательный атрибут, который задаёт имя для RouteRule. В имени разрешено использовать следующие символы: A-Za-z0-9._\-$ % . Например, Cat2 %_ — допустимое имя. Н/Д Да
Condition Необязательный условный оператор, используемый для динамической маршрутизации во время выполнения. Условные правила маршрутизации полезны, например, для включения маршрутизации на основе содержимого для поддержки управления версиями на внутреннем уровне. Н/Д Нет
TargetEndpoint

Необязательная строка, идентифицирующая конфигурацию именованной конечной точки TargetEndpoint. Именованная конечная точка TargetEndpoint — это любая конечная точка TargetEndpoint, определённая в том же прокси-сервере API в каталоге /targets .

Указывая имя 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"/>

Условные маршруты null могут быть полезны. В следующем примере маршрут null настроен на выполнение, когда HTTP-заголовок request.header.X-DoNothing имеет значение, отличное от null .

<RouteRule name="DoNothingOnDemand">
  <Condition>request.header.X-DoNothing != null</Condition>
</RouteRule>

Помните, что RouteRules можно объединять в цепочку, поэтому условный нулевой маршрут обычно будет одним из компонентов набора RouteRules, предназначенных для поддержки условной маршрутизации.

Практическое применение условного нулевого маршрута — поддержка кэширования. Используя значение переменной, заданной политикой кэширования, можно настроить API-прокси для выполнения нулевого маршрута при обработке записи из кэша.

<RouteRule name="DoNothingUnlessTheCacheIsStale">
  <Condition>lookupcache.LookupCache-1.cachehit is true</Condition>
</RouteRule>

TargetEndpoint

Показывает, как клиент вызывает HTTP-сервис. Запрос проходит через конечную точку прокси-сервера, а затем через целевую конечную точку, прежде чем будет обработан HTTP-сервисом. Ответ проходит через целевую конечную точку, а затем через конечную точку прокси-сервера, прежде чем будет возвращен клиенту.

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 для направления запросов на исходящую обработку. В имени разрешено использовать следующие символы: A-Za-z0-9._\-$ % . Н/Д Да
PreFlow Определяет политики в потоке PreFlow запроса или ответа. Н/Д Да
Flows
Определяет политики в условных потоках запроса или ответа.
Н/Д Да
PostFlow
Определяет политики в потоке PostFlow запроса или ответа.
Н/Д Да
HTTPTargetConnection

С помощью своих дочерних элементов определяет доступ к внутреннему ресурсу через HTTP.

Если вы используете HTTPTargetConnection, не настраивайте другие типы целевых подключений (ScriptTarget или LocalTargetConnection).

URL Определяет сетевой адрес внутренней службы, на которую TargetEndpoint пересылает сообщения-запросы. Н/Д Нет
LoadBalancer

Определяет одну или несколько именованных конфигураций TargetServer. Именованные конфигурации TargetServer могут использоваться для балансировки нагрузки, определяя два или более подключений к конфигурации конечных точек.

Вы также можете использовать 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.

<ResourceURL>node://server.js</ResourceURL>

Скрипт необходимо включить в файлы ресурсов вашего API-прокси. См. раздел Добавление Node.js к существующему API-прокси .

Если вы используете ScriptTarget, не настраивайте другие типы целевых подключений (HTTPTargetConnection или LocalTargetConnection).

Н/Д Да
EnvironmentVariable

При необходимости передайте переменные среды в основной скрипт Node.js.

См. раздел Общие сведения о поддержке Edge для модулей Node.js.

Н/Д Нет
Arguments

При необходимости передайте аргументы основному скрипту Node.js.

См. раздел Общие сведения о поддержке Edge для модулей Node.js.

Н/Д Нет

Конфигурация целевой конечной точки TLS/SSL

Целевым конечным точкам часто приходится управлять HTTPS-подключениями с разнородной внутренней инфраструктурой. Поэтому поддерживается ряд параметров конфигурации TLS/SSL.

Элементы конфигурации целевой конечной точки TLS/SSL

Имя Описание По умолчанию Необходимый?
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.

По умолчанию указанное значение точно соответствует общему имени целевого сертификата. Например, использование *.myhost.com в качестве значения <CommonName> будет соответствовать и подтверждать целевое имя хоста только в том случае, если в целевом сертификате в качестве общего имени указано точное значение *.myhost.com .

При желании Apigee может выполнить сопоставление с подстановочными знаками, используя атрибут wildcardMatch .

Например, общее имя, указанное как abc.myhost.com в целевом сертификате, будет сопоставлено и проверено, если элемент <CommonName> указан следующим образом:

<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-прокси: Dynamic SSLInfo for TargetEndpoint using variable reference .

В следующем примере установки тега <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 for Private Cloud при настройке 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

В ссылке указано имя хранилища ключей и его тип.

Для просмотра ссылки используйте следующий вызов 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:password

TargetEndpoint с целевой балансировкой нагрузки

TargetEndpoints поддерживают балансировку нагрузки между несколькими именованными TargetServer с использованием трех алгоритмов балансировки нагрузки.

Подробные инструкции см. в разделе Балансировка нагрузки на внутренних серверах .

Политики

Каталог /policies в прокси-сервере API содержит все политики, доступные для присоединения к потокам в прокси-сервере API.

Элементы конфигурации политики

Имя Описание По умолчанию Необходимый?
Policy
name

Внутреннее имя политики. В имени можно использовать только следующие символы: A-Za-z0-9._\-$ % . Однако пользовательский интерфейс управления Edge накладывает дополнительные ограничения, например, автоматически удаляет символы, не являющиеся буквами или цифрами.

При желании можно использовать элемент <DisplayName> , чтобы обозначить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

Н/Д Да
enabled

Установите значение true , чтобы применить политику.

Установите значение false , чтобы отключить политику. Политика не будет применяться, даже если она останется привязанной к потоку.

истинный Нет
continueOnError

Установите значение false , чтобы возвращать ошибку при сбое политики. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Нет
async

Примечание : этот атрибут не обеспечивает асинхронное выполнение политики. В большинстве случаев оставьте значение по умолчанию — false .

При значении true выполнение политики переносится в другой поток, позволяя основному потоку обрабатывать дополнительные запросы. После завершения автономной обработки основной поток возвращается к работе и завершает обработку потока сообщений. В некоторых случаях значение true для async повышает производительность прокси-сервера API. Однако чрезмерное использование async может снизить производительность из-за слишком частого переключения потоков.

Чтобы использовать асинхронное поведение в прокси API, см. Объектную модель JavaScript .

ЛОЖЬ Нет

Приложение к политике

На следующем изображении показана последовательность выполнения потоков прокси-API:

показывает клиент, вызывающий HTTP-сервис. Запрос встречает ProxyEndpoint и TargetEndpoint, каждая из которых содержит шаги, запускающие политики. После того, как HTTP-сервис возвращает ответ, ответ обрабатывается TargetEndpoint, а затем ProxyEndpoint перед возвращением клиенту. Как и в случае с запросом, ответ обрабатывается политиками в рамках шагов.

Как показано выше:

Политики прикрепляются к потокам как этапы обработки. Имя политики используется для ссылки на политику, которая должна быть применена как этап обработки. Формат прикреплённой политики следующий:

<Step><Name>MyPolicy</Name></Step>

Политики применяются в том порядке, в котором они прикреплены к потоку. Например:

<Step><Name>FirstPolicy</Name></Step>
<Step><Name>SecondPolicy</Name></Step>

Элементы конфигурации прикрепления политики

Имя Описание По умолчанию Необходимый?
Step
Name Имя политики, которая будет выполнена данным определением шага. Н/Д Да
Condition Условный оператор, определяющий, применяется ли политика. Если с политикой связано условие, то политика выполняется только в том случае, если условный оператор имеет значение «истина». Н/Д Нет

Потоки

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 выполняет потоки в следующей последовательности:

Канал обработки запросов:

  1. PreFlow запроса прокси
  2. Условные потоки запросов прокси (необязательно)
  3. Запрос прокси PostFlow
  4. Целевой запрос PreFlow
  5. Условные потоки целевого запроса (необязательно)
  6. Целевой запрос PostFlow

Конвейер реагирования:

  1. Предварительный поток целевого ответа
  2. Условные потоки целевого отклика (необязательно)
  3. Целевой ответ PostFlow
  4. PreFlow ответа прокси-сервера
  5. Условные потоки ответов прокси (необязательно)
  6. Ответ прокси-сервера PostFlow
  7. Ответ PostClientFlow (необязательно)

В конфигурациях ProxyEndpoint или TargetEndpoint необходимо настраивать только потоки с прикрепленными политиками. PreFlow и PostFlow необходимо указывать в конфигурации ProxyEndpoint или TargetEndpoint только в тех случаях, когда необходимо применить политику во время обработки PreFlow или PostFlow.

In contrast to conditional flows, the ordering of PreFlow and PostFlow elements is not important--the API proxy will always execute each at the appropriate point in the pipeline, regardless of where they appear in the Endpoint configuration.

Conditional Flows

ProxyEndpoints and TargetEndpoints support an unlimited number of conditional flows (also known as 'named flows').

The API proxy tests for the condition specified in the conditional flow and, if the condition is met, the processing steps in the conditional flow are executed by the API proxy. If the condition is not met, then the processing steps in the conditional flow are bypassed. Conditional flows are evaluated in the order defined in the API proxy and the first one whose condition is met is executed.

By defining conditional flows, you gain the ability to apply processing steps in an API proxy based on:

  • Запрос URI
  • HTTP verb (GET/PUT/POST/DELETE)
  • Value of a query param, header, and form param
  • Many other types of conditions

For example, the following conditional flow specifies that it is executed only when the request resource path is /accesstoken . Any inbound request with the path /accesstoken causes this flow to be executed, along with any policies that are attached to the flow. If the request path does not include the suffix /accesstoken , then the flow does not execute (although another conditional flow might).

<Flows>
  <Flow name="TokenEndpoint">
    <Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition>
    <Request>
      <Step>
        <Name>GenerateAccessToken</Name>
      </Step>
    </Request>
  </Flow>
</Flows>

Flow Configuration Elements

Имя Описание По умолчанию Необходимый?
Flow A request or response processing pipeline defined by A ProxyEndpoint or TargetEndpoint
Name The unique name of the Flow. Н/Д Да
Condition A conditional statement that evaluates on or more variables to evaluate to true or false. All Flows other than the predefined PreFlow and PostFlow types must define a condition for their execution. Н/Д Да
Request The pipeline associated with Request message processing Н/Д Нет
Response The pipeline associated with Response message processing Н/Д Нет

Step processing

The sequential ordering of conditional Flows is enforced by Apigee Edge. Conditional Flows execute from top to bottom. The first conditional Flow whose condition evaluates to true is executed, and only one conditional Flow is executed.

For example, in the following Flow configuration, any inbound request that does not include the path suffix /first or /second will cause the ThirdFlow to execute, enforcing the policy called 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>

Ресурсы

"Resources" (resource files for use in API proxies) are scripts, code, and XSL transformations that can be attached to Flows using policies. These appear in the "Scripts" section of the API proxy editor in the management UI.

See Resource files for the supported resource types.

Resources can be stored in an API proxy, an environment, or an organization. In each case, a resource is referenced by name in a Policy. API Services resolves the name by moving from the API proxy, to environment, to organization level.

A resource stored at the organization level can be referenced by Policies in any environment. A resource stored at the environment level can be referenced by Policies in that environment. A resource stored at the API proxy level can be referenced only by Policies in that API proxy.