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

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

مقدمة

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

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

مثال:

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