Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Введение
Используйте модуль apigee-access, чтобы получить доступ к переменным потока Apigee Edge в приложении Node.js. В модуле есть методы для получения, установки и удаления переменных. Также в нем есть удобный метод для установки целочисленной переменной.
Переменные потока существуют в контексте потока прокси-сервера API. Некоторые переменные встроены в Edge. Другие создаются при выполнении правил, а также вы можете создавать собственные переменные. Переменные потока обычно используются для передачи данных из одного правила в другое и для задания условий в условных потоках. Подробнее о переменных и условиях потока…
Чтобы узнать больше о модуле apigee-access и его функциях, ознакомьтесь со статьей Как использовать модуль apigee-access.
Пример использования
Предположим, что правило Edge, выполняемое в пути потока запроса, задает переменную AuthenticatedUserId. Следующий код обращается к этой переменной и выводит ее в журнал. Кроме того, этот код задает переменную. Затем вы можете получить доступ к этой переменной из правила, как показано ниже.
var http = require('http'); var apigee = require('apigee-access'); http.createServer(function (request, response) { // The request parameter must be a request object that came from the http module var userId = apigee.getVariable(request, 'AuthenticatedUserId'); apigee.setVariable(request, "custom.foo", "Bar"); console.log('Authenticated Apigee User ID is %s', userId); response.writeHead(200, {'Content-Type': 'text/plain'}); response.end('Hello World\n'); }).listen(8124); console.log('Server running at http://127.0.0.1:8124/');
Вы можете скопировать этот код в файл JavaScript, развернуть его в Edge и попробовать. Позвонить на номер, указанный в файле server.js. Чтобы развернуть его, используйте:
apigeetool deploynodeapp -u username -p password -o myorg -e test -n access -d . -m server.js -b /access
После того как вы развернете приложение в Edge, добавьте правило AssignMessage со следующей конфигурацией в поток запросов ProxyEndpoint:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="AddUserId"> <DisplayName>AddUserId</DisplayName> <FaultRules/> <Properties/> <AssignVariable> <Name>AuthenticatedUserId</Name> <Value>ntesla</Value> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Затем прикрепите ещё одну политику AssignMessage к предварительному потоку ответа TargetEndpoint:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="SetHeader"> <DisplayName>SetHeader</DisplayName> <FaultRules/> <Properties/> <Set> <Headers> <Header name="MySpecialHeader">{custom.foo}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Вы можете вызвать прокси-сервер следующим образом:
curl -i http://myorg-test.apigee.net/access
Теперь перейдите на страницу прокси доступа в интерфейсе управления и откройте представление Разработка. Нажмите Node.js Logs (Журналы Node.js), чтобы посмотреть выходные данные журнала из прокси. Если прокси-сервер настроен правильно, вы увидите, что переменная userId задана. В окне терминала вы также увидите, что заголовок был задан в выходных данных cURL:
HTTP/1.1 200 OK Content-Type: text/plain Date: Tue, 27 05 2014 23:20:52 GMT MySpecialHeader: Bar Content-Length: 12 Connection: keep-alive
Методы
getVariable
var result = getVariable(httpRequest, name);
Получает переменную с указанным названием.
Параметры:
httpRequest: объект запроса, полученный от модуля http.name: (строка) название переменной, которую нужно получить.
Возвраты
Строка или число в зависимости от типа, заданного с помощью setVariable(), когда вы создали переменную в другом месте или когда ее создали правила. Если вы используете одну из стандартных переменных Edge, список их типов можно найти в справочнике по переменным. Типы переменных, созданных правилами, описаны в справочных статьях о соответствующих правилах.
Примеры:
var apigee = require('apigee-access'); // "httpRequest" must be a request object that came from the http module var val1 = apigee.getVariable(request, 'TestVariable'); var val2 = apigee.getVariable(request, 'request.client.ip');
setVariable
setVariable(httpRequest, name, value);
Устанавливает переменную. Некоторые переменные доступны только для чтения, и при попытке задать одну из них метод setVariable() вызывает исключение. Чтобы узнать, какие переменные доступны только для чтения, ознакомьтесь с справочной информацией о переменных.
Параметры:
httpRequest: объект запроса, полученный от модуля http.name: (строка) название переменной, которую нужно получить.value: может быть числом, строкой, логическим значением, null или undefined.
Пример
var apigee = require('apigee-access'); apigee.setVariable(request, 'TestVariable', 'bar'); // This will throw an exception because client.ip is read-only. apigee.setVariable(request, 'client.ip');
setIntVariable
setIntVariable(httpRequest, name, value);
Метод setIntVariable() – это удобный метод, который сначала преобразует параметр value в целое число, а затем задает его.
Параметры:
httpRequest: объект запроса, полученный от модуля http.name(строка). Название переменной, которую нужно задать.value– параметр value должен быть строкой или числом.
Пример
var apigee = require('apigee-access'); // Convert "123" to an integer and set it apigee.setIntVariable(request, 'TestVariable', '123'); // Use something that's already a number apigee.setIntVariable(request, 'TestVariable2', 42);
deleteVariable
Удаляет переменную с указанным названием. Удалять переменные, доступные только для чтения, нельзя. Полный список переменных, доступных только для чтения, приведен в справочнике по переменным.
deleteVariable(httpRequest, name);
Параметры:
httpRequest: объект запроса, полученный от модуля http.name– строка с названием переменной, которую нужно удалить.
Пример
apigee.deleteVariable(request, 'TestVariable'); // This will throw an exception because client.ip is a read-only variable. apigee.deleteVariable(request, 'client.ip');