إضافة Node.js إلى خادم وكيل حالي لواجهة برمجة التطبيقات

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

مقدمة

يوضِّح هذا الموضوع طريقة إضافة تطبيق Node.js إلى خادم وكيل حالي على نظام الملفات المحلي وكيفية نشر الخادم الوكيل في Apigee Edge.

تحضير بيئة التطوير

في هذا الموضوع، نفترض أنّه لديك بيئة تطوير خادم وكيل تم إعدادها على نظامك المحلي وأنّك تريد دمج تطبيق Node.js فيها.

تتّبع البنية الأساسية لتطبيق الخادم الوكيل الذي يتضمّن تطبيق Node.js النمط الظاهر في الشكل أدناه، مع المجلد الأساسي /apiproxy والمجلدات الفرعية لكل من الموارد والأهداف والخوادم الوكيلة. مجلد apiproxy/resources/node هو المكان الذي يجب وضع ملفات Node.js فيه. تحتوي المجلدات الأخرى على ملفات XML تحدّد الخادم الوكيل ونقاط النهاية المستهدفة وتدفق الخادم الوكيل والمسارات الشرطية وما إلى ذلك. للحصول على وصف أكثر اكتمالاً لبنية الخادم الوكيل لواجهة برمجة التطبيقات، يمكنك الاطّلاع على مرجع إعداد الخادم الوكيل لواجهة برمجة التطبيقات.

تذكَّر فقط أنّ أي رمز Node.js يكون جزءًا من الخادم الوكيل يجب وضعه ضمن /apiproxy/resources/node. وهذا هو المكان الذي يتوقع أن يعثر فيه Edge عند نشره.

تحديد هدف Node.js مع ScriptTarget

إنّ مفتاح دمج Node.js في خادم وكيل هو تحديد عنصر <ScriptTarget> في ملف XML لنقطة النهاية المستهدفة. في بنية ملف الخادم الوكيل، يقع ملف XML هذا في apiproxy/targets. ويكون اسم الملف هو default.xml تلقائيًا.

بالنسبة للسياق، ضع في اعتبارك أن نقطة النهاية المستهدفة تشير عادةً إلى خدمة خلفية من نوع ما. في هذه الحالة، وصلنا إلى خدمة الهدف التجريبي Apigee. يبدو تعريف نقطة النهاية المستهدفة على النحو التالي:

<TargetEndpoint name="default">
    <Description/>
    <Flows/>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
    <HTTPTargetConnection>
        <URL>http://mocktarget.apigee.net/</URL>
    </HTTPTargetConnection>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
</TargetEndpoint>

يحدد العنصر <HTTPTargetConnection> عنوان URL لخدمة الخلفية، وهي خدمة الهدف التجريبي Apigee.

مع ذلك، في حالة Node.js، يكون تطبيق Node.js نفسه هو الهدف. ويمكنك تحديد ذلك باستخدام <ScriptTarget> في ملف apiproxy/targets/default.xml.

بدلاً من استخدام عنصر <HTTPTargetConnection> لتحديد عنوان URL لخدمة خلفية، تتم الإشارة إلى تطبيق Node.js مباشرةً باستخدام عنصر <ScriptTarget>، على النحو التالي:

<TargetEndpoint name="default">
    <ScriptTarget>
         <ResourceURL>node://server.js</ResourceURL>
    </ScriptTarget>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
</TargetEndpoint>

يجب دائمًا أن تبدأ المَعلمة <ResourceURL> ببادئة node://، وأن يتبعها اسم نصّ Node.js البرمجي الرئيسي. وكما ذكرنا سابقًا، يجب أن تكون موارد Node.js موجودة في /apiproxy/resources/node على نطاق الخادم الوكيل لواجهة برمجة التطبيقات.

يمكنك تعيين معلمات إضافية في ScriptTarget. لمعرفة التفاصيل، يُرجى الاطّلاع على إعدادات استهداف النص البرمجي المتقدّمة.

لتوضيح الغرض من هذا المثال، إليك رمز المصدر لملف Node.js الرئيسي المسمى server.js. هو خادم HTTP الأساسي الذي يعرض رسالة "Hello World!" عندما يتلقى طلبًا:

var http = require('http');
console.log('node.js application starting...');
var svr = http.createServer(function(req, resp) {
    resp.end('Hello, Node!');
});

svr.listen(process.env.PORT || 9000, function() {
    console.log('Node HTTP server is listening');
});

خلاصة القول، على افتراض أنّ تطبيق Node.js الرئيسي يتم تنفيذه في ملف يُسمى server.js، وأنّ إعدادات نقاط النهاية تحمل اسم default.xml، يحتوي الخادم الوكيل لواجهة برمجة التطبيقات الذي يحتوي على النص البرمجي لـ Node.js على البنية التالية:

/apiproxy/proxyName.xml
/apiproxy/proxies/default.xml
/apiproxy/targets/default.xml
/apiproxy/resources/node/server.js

الاستعداد لنشر التطبيق

تحتوي معظم تطبيقات Node.js على ملفات تبعية وتتضمن ملف package.json في الدليل الأساسي. في هذه الحالة، فإنّ أفضل ممارسة هي تشغيل الأداة npm لضمان تعبئة دليل node_modules ذي المستوى الأعلى بالتبعيات قبل نشره. إذا كانت هناك أي تبعيات بعيدة غير متضمنة في node_modules، لن يتم تشغيل تطبيق Node.js على Edge.

يمكنك بسهولة استرداد جميع الاعتماديات على نظام الملفات باستخدام الأداة المساعدة npm:

  1. من الدليل الأساسي لتطبيق Node.js، شغِّل:
$ npm install 

أو

$ npm update

عند تثبيت التبعيات، تكون جاهزًا لنشر الخادم الوكيل على Edge.

نشر تطبيق Node.js في Apigee Edge

قبل النشر، يجب معرفة اسم مؤسستك واسم المستخدم وكلمة المرور لحسابك على Apigee Edge. وستحتاج إلى هذه المعلومات لإنشاء أمر أداة النشر بشكل صحيح.

إليك الأمر. ويفترض (باستخدام العلامة -d) أنّك في الدليل الجذري للخادم الوكيل الخاص بك. إذا كان الخادم الوكيل يُسمى foo، أدخِل الأمر التالي في دليل foo:

$ apigeetool deployproxy -u username -p password -o org -e test -n hellonode -d .
للحصول على معلومات حول معنى كل علامة من علامات الأوامر، اتّبِع الخطوات التالية:

$ apigeetool deployproxy -h

للحصول على ملخّص سريع:

  • -n تتيح لك هذه العلامة إمكانية تحديد اسم الخادم الوكيل الذي سيتم إنشاؤه عند نشر التطبيق. سترى هذا الاسم في واجهة مستخدم الإدارة.
  • -d تحدّد هذه العلامة الدليل الجذري للخادم الوكيل لواجهة برمجة التطبيقات.
  • -o و-e و-u و-p: يتم تحديد اسم المؤسسة وبيئة النشر واسم المستخدم وكلمة المرور.
وهذا كل ما في الأمر. يتم تضمين تطبيق Node.js في خادم وكيل لواجهة برمجة التطبيقات، ويتم نشره على Edge وتنفيذه. وهو في انتظار الطلبات وهو جاهز للاختبار.

اختبار الخادم الوكيل الجديد لواجهة برمجة التطبيقات

لقد أضفت للتو تطبيق Node.js إلى خادم وكيل حالي لواجهة برمجة التطبيقات ونشرت الخادم الوكيل في Apigee Edge. لاختباره، يمكنك تشغيل أمر cURL هذا. نفترض أنّه يتم استخدام المسار الأساسي التلقائي (/) (تم تحديد المسار الأساسي في ملف إعداد نقطة النهاية للخادم الوكيل). تأكَّد من استبدال اسم مؤسستك بـ org_name. إذا لم يكن cURL مثبَّتًا على جهازك، يمكنك إدخال عنوان URL في متصفّح.

$ curl http://org_name-test.apigee.net/
Hello, Node!

عرض الخادم الوكيل الجديد في واجهة مستخدم الإدارة

سجِّل الدخول إلى حسابك على Apigee Edge وانتقِل إلى صفحة API Proxies. سيظهر لك الخادم الوكيل المسمى "hellonode" هناك.

انقر على "hellonode" لعرض تفاصيل حول الخادم الوكيل. في طريقة العرض "التطوير"، يمكنك الاطّلاع على رمز المصدر الذي حمّلته وإضافة سياسات وتعديل التدفقات وما إلى ذلك.

الخطوات التالية

للحصول على معلومات عن تصحيح الأخطاء في تطبيقات Node.js التي تعمل على Apigee Edge، يمكنك الاطّلاع على تصحيح الأخطاء في خوادم Node.js الوكيلة وحلّها.