Антишаблоны миграции Apigee Edge на Apigee X

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

Если вы являетесь текущим клиентом Apigee Edge, вы можете принять решение о миграции вашей установки на Apigee X , чтобы воспользоваться новыми возможностями или доступностью в других регионах.

На этой странице описаны антипаттерны в вашей конфигурации, которые необходимо устранить перед миграцией на Apigee X, а также другие изменения в поведении, о которых следует знать перед миграцией.

В более широком списке антипаттернов Apigee Edge описаны методы использования, которых следует избегать в любом случае. На этой странице описаны конкретные нежелательные методы использования, которые могут заблокировать миграцию. Устраните их сейчас, чтобы предотвратить проблемы при миграции на Apigee X.

Приложения без API-продуктов

Краткое содержание Требуются изменения на стороне клиента? Разрешение

Существуют приложения, не имеющие API-продуктов.

Разница между Apigee Edge и Apigee X:

Эпиги Эдж Апигее Х
Можно настроить приложение и учетные данные, не связанные ни с одним API-продуктом. В этом случае приложение фактически получит доступ ко всем API-продуктам. Каждое приложение должно быть настроено на доступ как минимум к одному API-продукту. Предоставить доступ ко всем API-продуктам автоматически невозможно. Вы можете настроить приложение на доступ ко всем API-продуктам, но это необходимо сделать явно.
Нет.

Решение: Приложения без API-продуктов

Свяжите учетные данные каждого приложения как минимум с одним продуктом API. Дополнительную информацию о том, как это сделать, см. в разделе «Регистрация приложений и управление ключами API» .

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

Кэш без срока действия

Краткое содержание Требуются изменения на стороне клиента? Разрешение

Кэш не имеет срока действия.

Разница между Apigee Edge и Apigee X:

Эпиги Эдж Апигее Х
Поддерживает создание, обновление и удаление дескрипторов ресурсов кэша. Не поддерживает создание, обновление или удаление дескрипторов ресурсов кэша.
Нет

Решение: кэширование без срока действия.

Установите время истечения срока действия для всех кэшей.

Выражения фильтрации JSONPath для неопределенных путей

Краткое содержание Требуются изменения на стороне клиента? Разрешение

Для неопределенных путей запрос результата выражения фильтра не является частью спецификации JSONPath. См. https://goessner.net/articles/JsonPath/ .

Разница между Apigee Edge и Apigee X:

При навигации по этой примерной структуре,

{
    "books": [
      {
        "name": "A",
      },
      {
        "name": "B",
      }
    ]
}

С помощью выражения $..books[?(@.name == 'A')][0] ,

Эпиги Эдж Апигее Х
Вывод '{"name": "A"}' Выходы []

С помощью выражения $..books[?(@.name == 'A')][0].name ,

Эпиги Эдж Апигее Х
Выходы "A" Выходы []
Да

Решение: Фильтрация выражений JSONPath для неопределенных путей.

Найти и заменить затронутые запросы.

Выражения JSONPath для индексов, которые отсутствуют.

Краткое содержание Требуются изменения на стороне клиента? Разрешение

В Apigee X и Apigee Edge поведение выражений JSONPath, содержащих отсутствующий индекс, различается. В Apigee X при отсутствии пути возвращается ошибка PathNotFoundException .

Разница между Apigee Edge и Apigee X:

При навигации по этой примерной структуре,

{
    "books": [
      {
        "name": "A",
      },
      {
        "name": "B",
      }
    ]
}

С помощью выражения $.books[3] ,

Эпиги Эдж Апигее Х
Выходные данные: null Выводит ошибку PathNotFoundException
Да

Решение: выражения JSONPath для индексов, которые отсутствуют.

Найти и заменить затронутые запросы.

Выражения JSONPath с индексом массива не возвращают объект массива.

Краткое содержание Требуются изменения на стороне клиента? Разрешение

В Apigee X выражения JSONPath с индексом массива или срезами возвращают объект массива.

Разница между Apigee Edge и Apigee X:

При навигации по этой примерной структуре,

{
    "books": [
      {
        "name": "A",
      },
      {
        "name": "B",
      }
    ]
}

С помощью выражения $.books ,

Эпиги Эдж Апигее Х
Вывод {“name”:”A”, “name”: “B”} Вывод [{“name”:”A”, “name”: “B”}]

С помощью выражения $.books[-1] ,

Эпиги Эдж Апигее Х
Вывод {“name”: “B”} Выходы [{“name”: “B”}]

С помощью выражения $.books[-2:] ,

Эпиги Эдж Апигее Х
Вывод {“name”:”A”, “name”: “B”} Вывод [{“name”:”A”, “name”: “B”}]
Да

Решение: выражения JSONPath с индексом массива не возвращают объект массива.

Найти и заменить выражения, которые могут давать разные результаты после обновления.

Ограничения на имена хранилища ключей

Краткое содержание Требуются изменения на стороне клиента? Разрешение

Имена хранилищ ключей Apigee X могут содержать только буквы, цифры и дефисы. Для имен хранилищ ключей Edge эти ограничения не действуют.

Нет

Решение: Ограничения на имена хранилища ключей.

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

Для API-прокси развернуто несколько базовых путей.

Краткое содержание Требуются изменения на стороне клиента? Разрешение

В среде развертывается несколько версий API-прокси, и каждая версия имеет свой собственный базовый путь.

Разница между Apigee Edge и Apigee X:

Эпиги Эдж Апигее Х
Поддерживает развертывание нескольких версий API-прокси, при этом каждая версия может иметь свой собственный базовый путь. Не поддерживает развертывание нескольких версий API-прокси, даже если у прокси разные базовые пути.
Нет

Решение: Для API-прокси развернуто несколько базовых путей.

Обновите все пакеты таким образом, чтобы в среду развертывалась только одна ревизия пакета, независимо от базового пути.

Несоответствующие требованиям HTTP-сообщения

Краткое содержание Требуются изменения на стороне клиента? Разрешение

Клиенты или API-прокси отправляют сообщения (запросы или ответы), которые не соответствуют стандарту HTTP. Например, содержат недопустимые имена заголовков, дублирование в некоторых запрещенных заголовках и так далее.

Переход на Apigee X невозможен, если при выполнении API-запроса возникает одна или несколько из следующих ошибок:

Ошибка Подробности
INVALID_CHARACTERS_IN_HEADER В указанном заголовке обнаружен один или несколько недопустимых символов. Допустимые имена заголовков состоят из английских букв, цифр и дефисов.
ОТСУТСТВУЕТ ДВОЕТОЧИЕ Отсутствует двоеточие : :) в паре "имя заголовка" и "значение заголовка".
MULTIPLE_CONTENT_LENGTH Для заголовка Content-Length было указано несколько значений.
CONTENT_LENGTH_NOT_INTEGER Значение заголовка Content-Length не является целым числом.
INVALID_UPGRADE Заголовок Upgrade должен использоваться только для включения соединений WebSocket, но в данном случае это не так.
URL_HEADER_SIZE_TOO_LONG Общий размер URL-адреса запроса и заголовков превышает максимально допустимый размер в 15 КБ.
BODY_NOT_ALLOWED Тело сообщения не допускается для методов "GET", "DELETE", "TRACE", "OPTIONS" и "HEAD".
UNSUPPORTED_HTTP_VERSION Для запроса используется версия HTTP, отличная от 1.1, которая не поддерживается.
ZERO_CONTENT_LENGTH_FOR_POST_OR_PUT Для метода "POST" или "PUT" было установлено нулевое значение ("0") в поле заголовка Content-Length.
UNSUPPORTED_RESPONSE_PREFIX В заголовке ответа присутствовал неподдерживаемый префикс заголовка «X-Apigee-».
Да, возможно.

Решение: Несоответствующие требованиям HTTP-сообщения

Перед переходом на Apigee X необходимо исправить все ошибки в протоколах HTTP. Если ошибка возникает в клиентском приложении, необходимо обратиться к разработчику этого приложения с просьбой исправить проблему.

Недействителен срок действия токена OAuth 2.0.

Краткое содержание Требуются изменения на стороне клиента? Разрешение

Ограничения по сроку действия токенов OAuth 2.0 выходят за пределы установленного диапазона.

Разница между Apigee Edge и Apigee X:

Эпиги Эдж Апигее Х
В настоящее время никаких ограничений на время истечения срока действия токена OAuth 2.0 не установлено, но их внедрение планируется. См. рекомендации в разделе OAuth на странице «Ограничения» . Для аутентификации OAuth 2.0 необходимо установить время истечения срока действия токена доступа и токена обновления. Поддерживаемые диапазоны:
  • 180 секунд <= Время истечения срока действия токена доступа OAuth 2.0 <= 30 дней
  • 1 день <= Срок действия токена обновления OAuth 2.0 <= 2 года
Нет

Решение: Неверное время истечения срока действия токена OAuth 2.0

Используйте политику OAuthV2 и укажите время истечения срока действия в <ExpiresIn> и <RefreshTokenExpiresIn> .

Превышен лимит продукции.

Краткое содержание Требуются изменения на стороне клиента? Разрешение

Конфигурация Apigee Edge не соответствует установленным ограничениям продукта . Некоторые ограничения продукта, которые задокументированы, но не применяются в Apigee Edge, применяются в Apigee X.

Нет

Решение: Превышен лимит продукции.

Перед переходом на Apigee X устраните все случаи использования, превышающие лимиты продукта.

Политики ServiceCallout с указанием целевого соединения как с конечной точкой, так и с путем.

Краткое содержание Требуются изменения на стороне клиента? Разрешение

В политике ServiceCallout элемент <LocalTargetConnection> должен включать либо элементы <APIProxy> и <ProxyEndpoint> , либо элемент <Path> , но не оба одновременно. Для получения дополнительной информации см. элемент <LocalTargetConnection> .

Apigee Edge документирует это требование, но не обеспечивает его соблюдение. Apigee X прекращает обработку, если встречает соединение <LocalTargetConnection> с обеими конфигурациями.

Нет

Решение: Политики ServiceCallout с указанием целевого соединения как с конечной точкой, так и с путем.

Проверьте конфигурации политики ServiceCallout и удалите все конфигурации <LocalTargetConnection> , которые не соответствуют требованиям.

Ограничения на имена целевых серверов

Краткое содержание Требуются изменения на стороне клиента? Разрешение

Имена целевых серверов Apigee X могут содержать только буквы, цифры, дефисы и точки. Имена целевых серверов Edge не накладывают этих ограничений.

Нет

Решение: Ограничения на имена целевого сервера

Проверьте имена целевых серверов и при необходимости обновите их, удалив неподдерживаемые символы.

Пробный сертификат в виртуальном хосте

Краткое содержание Требуются изменения на стороне клиента? Разрешение

Один или несколько виртуальных хостов используют предоставленный Apigee сертификат "бесплатной пробной версии". Это приводит к тому, что виртуальный хост отвечает на запросы к доменам типа ORG-ENV.apigee.net .

Разница между Apigee Edge и Apigee X:

Эпиги Эдж Апигее Х
Автоматически настраивает виртуальный хост по умолчанию для поддержки доменного имени вида ORG-ENV.apigee.net . Существует сертификат с подстановочным знаком, известный как «бесплатный пробный сертификат», который позволяет использовать TLS для этих доменов. Устаревшие домены Apigee вида ORG-ENV.apigee.net недоступны в Apigee X. Вам необходимо настроить собственное доменное имя и соответствующим образом подготовить сертификаты.
Да

Решение: Пробный сертификат в виртуальном хосте

Вам необходимо настроить собственный домен и соответствующим образом подготовить сертификаты.

Любое клиентское приложение, зависящее от устаревшего доменного имени вида ORG-ENV.apigee.net , должно быть изменено для обращения к новому домену.

Неразрешенные DNS-запросы

Краткое содержание Требуются изменения на стороне клиента? Разрешение

Целевая конечная точка (или точки) имеет неразрешенное доменное имя (имена).

Разница между Apigee Edge и Apigee X:

Эпиги Эдж Апигее Х
Если разрешение DNS-имени не удается, Apigee добавляет .apigee.com к доменному имени, и DNS-запрос успешно разрешается с кодом ответа 4xx . Если разрешение DNS-имен не удается, Apigee не выполняет запрос и возвращает код ответа 5xx .
Нет

Разрешение: Неразрешенные DNS-запросы

Обновите целевую конечную точку, указав допустимое доменное имя.