Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
В этой статье рассказывается, как с помощью JavaScript динамически добавлять HTTP-заголовки в сообщение ответа, а также как анализировать ответ JSON и возвращать подмножество его свойств в приложение, отправившее запрос.
Скачайте и попробуйте образец кода
Пример кулинарной книги
В этом примере из справочного руководства показан шаблон прокси-сервера API, в котором поведение API реализуется на JavaScript. Примеры кода на JavaScript предназначены для того, чтобы показать, как работать с простыми переменными и контентом сообщений. В одном примере показано, как получать и задавать переменные. Во втором примере показано, как анализировать JSON и создавать сообщение на основе полученных результатов.
В прокси-сервере API есть два примера кода JavaScript:
setHeaders.js: этот код JavaScript получает значения нескольких переменных, которые задаются при вызове прокси-сервера API. Скрипт JavaScript добавляет эти переменные в сообщение ответа, чтобы вы могли видеть их значения для каждого запроса.minimize.js: этот код JavaScript показывает, как работать с контентом сообщений. Идея этого примера заключается в том, что сервис часто возвращает больше данных, чем необходимо. Таким образом, JavaScript анализирует ответное сообщение, извлекает из него несколько интересных свойств и использует их для создания контента ответного сообщения.
Код для setHeader.js:
context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name")); context.setVariable("response.header.X-Apigee-ApiProxyName", context.getVariable("apiproxy.name")); context.setVariable("response.header.X-Apigee-ProxyName", context.getVariable("proxy.name")); context.setVariable("response.header.X-Apigee-ProxyBasePath", context.getVariable("proxy.basepath")); context.setVariable("response.header.X-Apigee-ProxyPathSuffix", context.getVariable("proxy.pathsuffix")); context.setVariable("response.header.X-Apigee-ProxyUrl", context.getVariable("proxy.url"));
Код для minimize.js:
// Parse the respose from the target. var res = JSON.parse(context.proxyResponse.content); // Pull out only the information we want to see in the response. var minimizedResponse = { city: res.root.city, state: res.root.state }; // Set the response variable. context.proxyResponse.content = JSON.stringify(minimizedResponse);
Переменные потока можно получить в JavaScript с помощью объекта контекста. Этот объект является частью объектной модели JavaScript Edge. Подробнее об объектной модели JavaScript…
Подготовка
Прежде чем изучать пример из этого руководства, ознакомьтесь с основными понятиями:
- Что такое правила и как прикрепить их к прокси. Чтобы узнать больше о правилах, прочитайте статью Что такое правила.
- Структура потока прокси-сервера, как описано в разделе Настройка потоков. Потоки позволяют задать последовательность, в которой правила выполняются прокси-сервером API. В этом примере создано несколько правил, которые добавлены в поток прокси-сервера API.
- Как организован проект прокси-сервера API в файловой системе, как описано в справочнике по конфигурации прокси-сервера API.
- Знание XML, JSON и JavaScript. В этом примере вы создадите прокси API и его правила с помощью XML-файлов, хранящихся в файловой системе.
Если вы скачали образец кода, то все файлы, о которых говорится в этом разделе, можно найти в папке javascript-cookbook. Подробное описание образца кода приведено в следующих разделах.
Как работает прокси-сервер
Чтобы JavaScript выполнялся в прокси-сервере API, его нужно прикрепить к потоку с помощью прикрепления правил, которое называется шагом. Правило типа Javascript (с учетом регистра) содержит только ссылку на название файла JavaScript. Вы указываете на файл JavaScript в правиле с помощью элемента ResourceURL.
Например, в следующем правиле упоминается файл JavaScript setHeader.js.
<Javascript name='setHeaders' timeLimit='200'> <ResourceURL>setHeaders.js</ResourceURL> </Javascript>
Это правило можно прикрепить к потоку прокси-сервера API так же, как и любое другое правило. Прикрепив правило к потоку прокси-сервера API, вы указываете, где должен выполняться код JavaScript. Это позволяет выполнять код JavaScript, который взаимодействует с сообщениями запросов или ответов, когда они проходят через прокси-сервер API. В этом примере оба скрипта JavaScript выполняются в потоке ответов, поскольку правила выполняют два действия: устанавливают заголовки HTTP в сообщении ответа и "минимизируют" сообщение ответа, которое Apigee Edge возвращает приложению, отправившему запрос.
Если вы откроете эту конфигурацию потока в интерфейсе управления, то увидите конфигурацию потока, приведенную ниже.
В панели навигации выберите Proxy Endpoints > default > PostFlow.

Ниже показана соответствующая конфигурация XML для ProxyEndpoint с названием default.
<ProxyEndpoint name="default"> <PostFlow> <Response> <!-- Steps reference policies under /apiproxy/policies --> <!-- First, set a few HTTP headers with variables for this transaction. --> <Step><Name>setHeaders</Name></Step> <!-- Next, transform the response from XML to JSON for easier parsing with JavaScript --> <Step><Name>transform</Name></Step> <!-- Finally, use JavaScript to create minimized response with just city and state. --> <Step><Name>minimize</Name></Step> </Response> </PostFlow> <HTTPProxyConnection> <!-- BasePath defines the network address for this API proxy. See the script 'invoke.sh' to see how the complete URL for this API proxy is constructed.--> <BasePath>/javascript-cookbook</BasePath> <!-- Set VirtualHost to 'secure' to have this API proxy listen on HTTPS. --> <VirtualHost>default</VirtualHost> </HTTPProxyConnection> <RouteRule name="default"> <TargetEndpoint>default</TargetEndpoint> </RouteRule> </ProxyEndpoint>
Ниже приведена сводка элементов потока.
- <Request> – элемент <Request> состоит из нескольких элементов <Step>. На каждом шаге вызывается одно из правил, которые вы создадите в оставшейся части этой статьи. Эти правила прикрепляют JavaScript к потоку прокси-сервера API, а место прикрепления определяет, когда будет выполняться JavaScript.
- <Response> – элемент <Response> также включает элемент <Steps>. Эти шаги также вызывают правила, которые отвечают за обработку окончательного ответа от целевого объекта (в этом примере это целевой объект макета сервиса Apigee – обратите внимание на настройку HTTPTargetConnection в разделе
/apiproxy/targets/default.xml). - <HTTPProxyConnection> – указывает хост и путь URI, которые определяют сетевой адрес, по которому приложения вызывают этот API.
- <RouteRule> – этот элемент указывает, какая конфигурация TargetEndpoint вызывается ProxyEndpoint.
Как добавить код JavaScript в прокси
Файлы JavaScript (например, скрипты Python, JAR-файлы Java, файлы XSLT и т. д.) хранятся как ресурсы. Если вы только начинаете работать с JavaScript, проще всего хранить файлы JavaScript в прокси-сервере API. По мере развития JavaScript должен становиться как можно более универсальным и пригодным для повторного использования, а затем храниться на уровне среды или организации. Это позволяет не хранить одни и те же файлы JavaScript в нескольких прокси API, что может быстро стать неудобным.
Подробнее о том, как хранить ресурсы на уровне организации и среды…
Попробовать
Инструкции по развертыванию и вызову прокси-сервера приведены в файле README для сборника рецептов JavaScript.
Импорт и развертывание прокси-сервера API
После внесения изменений вы можете сохранить прокси-сервер API в инструменте создания прокси-сервера API в интерфейсе управления.
Или выполните следующую команду в каталоге /api-platform-samples/doc-samples/javascript-cookbook.
$ sh deploy.sh
Тестирование JavaScript
Выполните следующую команду в каталоге /api-platform-samples/doc-samples/javascript-cookbook.
$ sh invoke.sh
Флаг curl -v используется в сценарии командной строки, чтобы просматривать HTTP-заголовки в сообщении ответа, измененном с помощью JavaScript.
Вы можете отправить запрос напрямую, выполнив следующие действия:
$ curl -v http://{org_name}-test.apigee.net/javascript-cookbook
Если код JavaScript выполнен правильно, вы увидите ответ, похожий на приведенный ниже:
< X-Apigee-Demo-Target: default < X-Apigee-Demo-ApiProxyName: simple-javascript < X-Apigee-Demo-ProxyName: default < X-Apigee-Demo-ProxyBasePath: /javascript-cookbook < X-Apigee-Demo-ProxyPathSuffix: /xml < X-Apigee-Demo-ProxyUrl: http://rrt331ea.us-ea.4.apigee.com/javascript-cookbook/xml {"city":"San Jose","state":"CA"}
Теперь вы можете изменить код JavaScript, чтобы попробовать что-то новое, повторно развернуть прокси-сервер API и проверить результаты, отправив тот же запрос. Чтобы изменения вступили в силу, всегда развертывайте прокси API, содержащий ваш код JavaScript.
Ошибки скриптов
При написании кода на JavaScript неизбежно возникают ошибки. Ниже показан формат ошибок JavaScript, которые могут возникать при работе с прокси-сервером API.
{ "fault":{ "faultstring":"Execution of rewriteTargetUrl failed with error: Javascript runtime error: \"TypeError: Cannot find function getVariable in object TARGET_REQ_FLOW. (rewriteTargetUrl_js#1). at line 1 \"", "detail":{ "errorcode":"steps.javascript.ScriptExecutionFailed" } } }
Когда использовать JavaScript
В Apigee Edge обычно есть несколько способов реализовать определенную функцию. По возможности используйте готовые правила и не пытайтесь реализовать всю логику прокси-сервера API на JavaScript. Хотя Apigee Edge использует скомпилированный код JavaScript для повышения производительности, маловероятно, что JavaScript будет работать так же хорошо, как правила. Поддержка и отладка JavaScript могут быть сложнее. Используйте JavaScript только для функций, которые необходимы вам.
Если производительность пользовательских функций имеет для вас большое значение, по возможности используйте Java.
Сводка
В этом разделе справочного руководства вы узнали, как включить JavaScript в конфигурацию прокси-сервера API, чтобы реализовать собственное поведение. В примерах показано, как получить переменные, проанализировать JSON и создать собственные сообщения ответа.