الوصول إلى متغيرات التدفق في Node.js

أنت تطّلع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

مقدمة

استخدِم وحدة apigee-access للوصول إلى متغيّرات تدفق Apigee Edge في تطبيق Node.js. تتضمّن الوحدة طرق الحصول على المتغيّرات وإعدادها وحذفها. وتتوفّر أيضًا طريقة مناسبة لضبط متغيّر عدد صحيح.

توجد متغيّرات المسار ضمن سياق مسار وكيل واجهة برمجة التطبيقات. بعض المتغيّرات "مضمّنة" في Edge. ويتم إنشاء متغيّرات أخرى عند تنفيذ السياسات، ويمكنك إنشاء متغيّرات خاصة بك. تُستخدَم متغيّرات المسار عادةً لنقل البيانات من سياسة إلى أخرى ولضبط الشروط في المسارات الشَرطية. للحصول على معلومات عن متغيّرات المسار، يُرجى الاطّلاع على متغيّرات المسار والشروط.

للحصول على مقدمة عن وحدة apigee-access وميزاتها الأخرى، اطّلِع على استخدام وحدة apigee-access.

مثال عملي

تخيل أنّ سياسة Edge التي تعمل على مسار تدفق الطلب تضبط متغيّرًا يُسمى AuthenticatedUserId. تحصل التعليمة البرمجية التالية على هذا المتغيّر وتطبعه في ملف log. بالإضافة إلى ذلك، تُعيِّن هذه التعليمة البرمجية متغيرًا. يمكنك بعد ذلك الوصول إلى هذا المتغيّر من إحدى السياسات، والتي سنوضّح كيفية استخدامها أدناه.

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 لعرض ناتج السجلّ من الخادم الوكيل. في حال ضبط الخادم الوكيل بشكل صحيح، ستلاحظ أنّه تم ضبط متغيّر 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: يمكن أن يكون رقمًا أو سلسلة أو منطقيًا أو خاليًا أو غير محدّد.

مثال:

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() هي طريقة ملائمة تُدخِل معلَمة القيمة أولاً إلى عدد صحيح، ثم تضبطها.

المَعلمات:

  • 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');