Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
В Edge есть мощная утилита под названием "API управления", которая предлагает следующие сервисы:
- развертывание или отмена развертывания прокси API;
- Настройка виртуальных хостов, хранилищ ключей и доверенных хранилищ и т. д.
- Создание, удаление и/или обновление объектов, таких как KeyValueMaps, продукты API, приложения разработчиков, разработчики, ключи потребителей и т. д.
- получать информацию об этих объектах;
Эти сервисы доступны через компонент Сервер управления на платформе Apigee Edge. Эти сервисы можно легко вызвать с помощью простых вызовов API управления.
Иногда нам может понадобиться использовать один или несколько этих сервисов из прокси API во время выполнения. Это связано с тем, что такие объекты, как KeyValueMaps, токены доступа OAuth, продукты API, приложения разработчиков, разработчики, ключи потребителей и т. д., содержат полезную информацию в виде пар "ключ-значение", пользовательских атрибутов или как часть профиля.
Например, в KeyValueMap можно хранить следующую информацию, чтобы сделать ее более безопасной и доступной во время выполнения:
- Целевые URL на стороне сервера
- Свойства среды
- Учетные данные для доступа к внутренним или сторонним системам.
Аналогичным образом во время выполнения может потребоваться получить список продуктов API или адрес электронной почты разработчика. Эта информация будет доступна в профиле приложений разработчика.
Вся эта информация может эффективно использоваться во время выполнения, чтобы обеспечить динамическое поведение в правилах или пользовательском коде в Apigee Edge.
Антипаттерн
API управления предпочтительнее и полезнее для административных задач, и их не следует использовать для выполнения какой-либо логики времени выполнения в потоке прокси API. Это может быть вызвано следующими причинами:
- Использование API управления для доступа к информации об объектах, таких как KeyValueMaps, токены доступа OAuth или для любых других целей из прокси API, приводит к зависимости от серверов управления.
- Серверы управления не являются частью компонента среды выполнения Edge, поэтому они могут быть не всегда доступны.
- Кроме того, серверы управления могут быть размещены в разных сетях или центрах обработки данных, что может привести к задержкам в работе сети.
- Записи на серверах управления кешируются на более длительный период времени, поэтому мы можем не сразу увидеть последние данные в прокси API, если выполняем операции записи и чтения за короткий промежуток времени.
- Увеличивает количество переходов по сети во время выполнения.
В приведенном ниже примере кода вызов API управления выполняется с помощью специального кода JavaScript, чтобы получить информацию из KeyValueMap:
var response = httpClient.send('https://api.enterprise.apigee.com/v1/o/org_name/e/env_name/keyvaluemaps/kvm_name')
Если сервер управления недоступен, то JavaScript-код, вызывающий API управления, не будет работать. Из-за этого запрос к API завершается неудачно.
Результат
- Во время выполнения появляется дополнительная зависимость от серверов управления. Любой сбой в работе серверов управления повлияет на вызовы API.
- Учетные данные пользователя для API управления должны храниться локально или в защищенном хранилище, например в зашифрованном KVM.
- Снижение производительности из-за вызова сервиса управления по сети.
- Обновленные значения могут появиться не сразу из-за более длительного срока действия кеша на управляющих серверах.
Совет
Существуют более эффективные способы получения информации из объектов, таких как KeyValueMaps, APIProducts, DeveloperApps, Developers, Consumer Keys и т. д., во время выполнения. Вот несколько примеров:
- Используйте правила KeyValueMapOperations, чтобы получить доступ к информации из KeyValueMaps. Ниже приведен пример кода, который показывает, как получить информацию из KeyValueMap:
<!-- /antipatterns/examples/2-6.xml --> <KeyValueMapOperations mapIdentifier="urlMap" async="false" continueOnError="false" enabled="true" name="GetURLKVM"> <DisplayName>GetURLKVM</DisplayName> <ExpiryTimeInSecs>86400</ExpiryTimeInSecs> <Scope>environment</Scope> <Get assignTo="urlHosti" index="2"> <Key> <Parameter>urlHost_1</Parameter> </Key> </Get> </KeyValueMapOperations>
- Чтобы получить доступ к информации о продуктах API, приложениях разработчиков, потребительских ключах и т. д. в прокси API, можно сделать следующее:
- Если в потоке прокси API есть правило VerifyAPIKey, вы можете получить доступ к информации, используя переменные потока, заполненные в рамках этого правила. Ниже приведен пример кода, который показывает, как получить название и информацию о том, кто создал приложение для разработчиков, с помощью JavaScript:
<!-- /antipatterns/examples/2-7.xml --> print("Application Name ", context.getVariable(""verifyapikey. VerifyAPIKey.app.name")); print("Created by:", context.getVariable("verifyapikey. VerifyAPIKey.app.created_by"));
- Если в потоке прокси API нет правила VerifyAPIKey, вы можете получить доступ к профилям продуктов API, приложений разработчиков и т. д., используя правила Access Entity и Extract Variables:
- Чтобы получить профиль DeveloperApp, используйте правило AccessEntity:
<!-- /antipatterns/examples/2-8.xml --> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AccessEntity async="false" continueOnError="false" enabled="true" name="GetDeveloperApp"> <DisplayName>GetDeveloperApp</DisplayName> <EntityType value="app"></EntityType> <EntityIdentifier ref="developer.app.name" type="appname"/> <SecondaryIdentifier ref="developer.id" type="developerid"/> </AccessEntity>
- Извлеките
appIdиз DeveloperApp с помощью правила ExtractVariables:<!-- /antipatterns/examples/2-9.xml --> <ExtractVariables name="Extract-Developer App-Info"> <!-- The source element points to the variable populated by AccessEntity policy. The format is <policy-type>.<policy-name> In this case, the variable contains the whole developer profile. --> <Source>AccessEntity.GetDeveloperApp"</Source> <VariablePrefix>developerapp</VariablePrefix> <XMLPayload> <Variable name="appld" type="string"> <!-- You parse elements from the developer profile using XPath. --> <XPath>/App/AppId</XPath> </Variable> </XMLPayload> </ExtractVariables>
- Чтобы получить профиль DeveloperApp, используйте правило AccessEntity:
- Если в потоке прокси API есть правило VerifyAPIKey, вы можете получить доступ к информации, используя переменные потока, заполненные в рамках этого правила. Ниже приведен пример кода, который показывает, как получить название и информацию о том, кто создал приложение для разработчиков, с помощью JavaScript: