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

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

مقدمة

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

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

للاطّلاع على مقدمة عن وحدة 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 لعرض نتائج السجل من الخادم الوكيل. في حال ضبط الخادم الوكيل بشكل صحيح، ستلاحظ أنّه قد تم ضبط متغيّر 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 غير التجهيزية، يمكنك العثور على قائمة بالأنواع في Variables Reference. بالنسبة إلى أنواع المتغيرات التي تم إنشاؤها بواسطة السياسات، يمكنك الرجوع إلى موضوع مرجع السياسة المحدّد.

أمثلة:

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: يجب أن تكون مَعلمة القيمة سلسلة أو رقمًا.

مثال:

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