Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Что такое выноска Java?
Apigee Edge предоставляет ряд политик, отвечающих общим требованиям управления API, таким как безопасность, преобразование данных, управление трафиком и другие.
Однако в некоторых случаях ваш API требует специального поведения, которое не реализовано в стандартной политике. В этих случаях Apigee предоставляет несколько опций, которые позволяют вам создавать сценарии или кодировать индивидуальное поведение API. Один из подходов — реализовать желаемое поведение на Java.
Информацию о поддерживаемых версиях Java см. в разделе Поддерживаемое программное обеспечение и поддерживаемые версии .
Как использовать код Java в прокси?
Политика вызовов Java позволяет вызывать код Java из исполняемого потока прокси. Ваш код Java должен реализовать определенные интерфейсы Java, специфичные для Edge, которые позволяют коду взаимодействовать с исполняющим прокси-сервером. Например, существуют методы Java для получения и установки заголовков, параметров запроса, переменных потока и других объектов в текущем контексте потока прокси.
Когда мне следует использовать выноску Java?
Давайте рассмотрим ситуации, когда выноски Java полезны, и ситуации, когда следует рассмотреть другие подходы.
Сначала рассмотрите альтернативные подходы
Прежде чем использовать выноску Java, обратите внимание, что вместо нее могут быть альтернативные подходы. Например:
- Для упрощенных операций, таких как вызовы HTTP API к удаленным службам, рассмотрите возможность использования политики ServiceCallout. См. политику вызова сервисных служб .
- Для относительно простых взаимодействий с содержимым сообщения, таких как изменение или извлечение заголовков HTTP, параметров или содержимого сообщения, вы можете использовать языки JavaScript или Python.
Что вы можете сделать в Java-коде
Выноска Java поддерживает следующие основные операции:
- Проверка или манипулирование сообщениями запроса или ответа
- Получение и установка переменных потока. Вы можете использовать методы Java для доступа к переменным потока Edge. Если вы хотите получить доступ к информации о карте ключевых значений (KVM), используйте политику KVM, назначьте значения KVM переменным потока, а затем вы сможете получить доступ к переменным потока из выноски Java.
- Вызов внешних служб
- Повышение неисправностей
- Управление сообщениями об ошибках и кодами состояния
Чего нельзя делать в Java-коде
Большинство системных вызовов запрещены. Вы не можете :
- Заставьте внутреннюю файловую систему читать или писать. Это означает, что вы не можете использовать ни один из пакетов Java для чтения/записи во внутренние файловые системы; однако вы можете совершать внешние удаленные вызовы.
- Получите информацию о текущем процессе, списке процессов или использовании ЦП/памяти на компьютере.
- Получите доступ к исходному коду в `expressions-1.0.0.jar` и `message-flow-1.0.0.jar`.
Хотя некоторые такие вызовы могут работать, они не поддерживаются и могут быть отключены в любой момент. Избегайте подобных вызовов в своем коде.
Не используйте и не полагайтесь на библиотеки Java, включенные в состав Apigee Edge. Эти библиотеки предназначены только для функциональности продукта Edge, и нет никакой гарантии, что библиотека будет доступна от выпуска к выпуску. Если вы используете такие библиотеки, используйте их только в непроизводственных демонстрациях.
Привет, выноска Java
Давайте рассмотрим базовый пример вызова Hello World Java. В этом примере мы создаем простой прокси-сервер с вызовом Java, который возвращает ответ «привет, мир». Прокси-сервер может вернуть один из двух возможных ответов:
- Если вы передадите заголовок «имя пользователя» со значением «имя», прокси вернет:
Hello, <name>!
- Если вы опустите заголовок, прокси просто вернет:
"Hello, Guest!"
Загрузите стартовый проект
Для простоты мы подготовили для вас базовый проект на GitHub в репозитории Apigee api-platform-samples .
- Загрузите или клонируйте образцы API-платформы в свою систему.
- В терминале или редакторе кода по вашему выбору перейдите к проекту
api-platform-samples/doc-samples/java-hello
.
Напишите Java-код
- Откройте исходный файл Java:
java-hello/callout/src/main/java/HelloJava.java
. Этот файл представляет собой скелетную версию основного класса Java, который мы будем реализовывать. Импортированные пакеты необходимы для кода Edge Java Callout. Эти классы предоставляют методы, позволяющие получить доступ к контексту выполнения прокси. Вскоре мы рассмотрим этапы компиляции и развертывания этого кода.
package com.apigeesample; import com.apigee.flow.execution.ExecutionContext; import com.apigee.flow.execution.ExecutionResult; import com.apigee.flow.execution.spi.Execution; import com.apigee.flow.message.MessageContext; public class HelloJava implements Execution { public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) { try { // Your code here. return ExecutionResult.SUCCESS; } catch (Exception e) { return ExecutionResult.ABORT; } } }
- Замените строку с комментарием
// Your code here
следующим кодом:
String name = messageContext.getMessage().getHeader("username"); if (name != null && name.length()>0) { messageContext.getMessage().setContent("Hello, " + name + "!"); messageContext.getMessage().removeHeader("username"); } else { messageContext.getMessage().setContent("Hello, Guest!"); }
- Сохраните файл.
Скомпилируйте свой код с помощью Maven
Проект настроен так, что его можно скомпилировать с помощью Maven. Если вы хотите использовать javac
, мы добавим пример, следующий за примером Maven.
- Убедитесь, что у вас установлен Maven:
mvn -version
- Выполните сценарий
java-hello/buildsetup.sh
. Этот скрипт устанавливает необходимые зависимости JAR в ваш локальный репозиторий Maven. - перейдите в каталог
java-hello/callout
. - Выполнить Maven:
mvn clean package
- При желании убедитесь, что файл JAR
edge-custom-policy-java-hello.jar
был скопирован вjava-hello/apiproxy/resources/java
. Это необходимое местоположение для файлов JAR, которые вы хотите развернуть с помощью прокси.
Скомпилировать с помощью javac (необязательно)
В предыдущем разделе вы автоматически создадите необходимый файл JAR Java с помощью команды Maven. Альтернативно, если вы хотите использовать javac
для компиляции кода, вы можете сделать что-то похожее на следующее (из каталога java-hello
). Необходимые файлы JAR предоставляются вам в каталоге java-hello/lib
.
- перейдите
api-platform-samples/doc-samples/java-hello
. - Убедитесь, что на вашем пути есть javac.
javac -version
- Выполните следующую команду javac:
javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/HelloJava.java
Это создастcom/apigeesample/HelloJava.class
. - Создайте файл JAR, содержащий скомпилированный класс, в каталоге
apiproxy/resources/java
. Это необходимое местоположение для файлов JAR, которые вы хотите развернуть с помощью прокси. Вы можете сделать это, выполнив следующую команду в каталогеjava-hello
(не забудьте точку в конце).
jar cvf apiproxy/resources/java/edge-custom-policy-java-hello.jar -C com .
Развертывание и вызов прокси
Скрипт развертывания находится в каталоге ./java-hello
. Но прежде чем запускать его, необходимо выполнить быструю настройку.
- перейдите
api-platform-samples/doc-samples/java-hello
- Если вы еще этого не сделали, откройте файл
../../setup/setenv.sh
и отредактируйте его, как указано, указав информацию вашей учетной записи Apigee: ваше имя пользователя (адрес электронной почты, связанный с вашей учетной записью), название вашей организации, и домен, который вы используете для вызовов управления API. Например, для облака Edge домен —https://api.enterprise.apigee.com
; однако ваш домен может быть другим, если вы используете Edge Private Cloud. - Сохраните файл
setenv.sh
. - Выполните сценарий развертывания:
./deploy.sh
- Если развертывание прошло успешно, выполните сценарий вызова:
./invoke.sh
Скрипт вызова вызывает команду cURL, которая выглядит следующим образом:
curl http://$org-$env.$api_domain/java-hello -H "username:Will"
Что возвращает «Привет, Уилл!
Вы можете отредактировать сценарий
invoke.sh
чтобы изменить имя, или если вы измените вызов cURL, чтобы удалить заголовок, команда вернет «Привет, Гость!»
О прокси
Давайте быстро рассмотрим политики, используемые в этом прокси. Обратите внимание на то, где политики расположены в потоке прокси и почему.
Политика назначения сообщений
Политика сообщений Assign прикрепляется к потоку запросов ProxyEndpoint. Он копирует заголовок имени пользователя из запроса и присваивает его ответу. Эта операция позволяет политике Java Callout, прикрепленной к потоку ответов, получить доступ к заголовку имени пользователя и создать настраиваемый текст ответа, используя значение этого заголовка.
<AssignMessage async="false" continueOnError="false" enabled="true" name="CopyHeader"> <DisplayName>CopyHeader</DisplayName> <Copy source="request"> <Headers> <Header name="username"/> </Headers> </Copy> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Политика вызовов Java
Политика вызовов Java прикрепляется к потоку ответов . Это связано с тем, что пользовательский код Java вносит изменения в заголовки ответов и сообщения. Элемент ClassName политики определяет основной класс, который выполняется политикой. Элемент ResourceURL — это имя файла JAR, который вы создали и добавили в каталог resources/java
прокси.
<JavaCallout name="hello-java"> <ClassName>com.apigeesample.HelloJava</ClassName> <ResourceURL>java://edge-custom-policy-java-hello.jar</ResourceURL> </JavaCallout>
Что нужно знать о выноске Java
При реализации выноски Java следует отметить следующие важные моменты:
- Импортирует классы из пакетов
com.apigee.flow.execution
иcom.apigee.flow.message
. Эти пакеты должны быть включены в файл JAR, который упаковывается и развертывается. Вы можете загрузить свой Java JAR через редактор прокси-сервера пользовательского интерфейса управления или включить его в каталог/resources/java
в прокси API, которые вы разрабатываете локально. - Реализует интерфейс выполнения. Любой код Java, который выполняется внутри прокси-сервера API, должен реализовывать выполнение.
- Политика Java Callout не содержит реального кода. Вместо этого политика Java Callout ссылается на «ресурс» Java, который необходимо упаковать в JAR.
- Имена пакетов, которых следует избегать: не используйте io.apigee или com.apigee в качестве имен пакетов в выносках Java. Они зарезервированы и используются другими модулями Apigee.
- Если ваша Java Callout использует дополнительные сторонние библиотеки, упакованные в виде независимых файлов JAR, поместите эти файлы JAR в каталог
/resources/java
, чтобы гарантировать их правильную загрузку во время выполнения. - Если имеется несколько файлов JAR, просто добавьте их в качестве дополнительных ресурсов. Вам не нужно изменять конфигурацию политики для обращения к дополнительным файлам JAR. Достаточно поместить их в
/resources/java
. - Дополнительную информацию о загрузке файлов JAR Java см. в разделе Файлы ресурсов .