إنشاء واجهة برمجة تطبيقات REST باستخدام Node.js وقاعدة بيانات Oracle

مرحبا يا هبر! أقدم إليكم ترجمة المقال "إنشاء واجهة برمجة تطبيقات REST: أساسيات خادم الويب" .

الجزء 1. إنشاء API REST: أساسيات خادم الويب


خادم الويب هو أحد أهم مكونات واجهة برمجة تطبيقات REST. في هذا المنشور ، ستبدأ مشروع REST API الخاص بك عن طريق إنشاء بعض الأدلة والملفات الأولية. ثم تقوم بإنشاء وحدة خادم الويب وتوصيلها حتى يبدأ خادم الويب في إيقاف التشغيل بشكل صحيح.

سيتم تنظيم الكود في هذا المشروع باستخدام بنية دليل مشتركة ، والتي يمكن تعديلها وبناؤها بمرور الوقت حسب الضرورة.

cd ~ mkdir hr_app cd hr_app/ touch index.js mkdir config touch config/web-server.js mkdir controllers mkdir db_apis mkdir services touch services/web-server.js 

يمكن اعتبار ملف index.js الملف "الرئيسي" في التطبيق. سيكون نقطة الدخول إلى التطبيق. سنضيف رمزًا إلى هذا الملف وملفات web-server.js في دلائل التكوين والخدمات.

الصق التعليمة البرمجية التالية في الملف Home> hr_app> config> web-server.js

 module.exports = { port: process.env.HTTP_PORT || 3000 }; 

في Node.js ، يحتوي كائن العملية على خاصية env التي تحتوي على بيئة مستخدم. أنا استخدم هذا لتعيين قيمة المنفذ إلى قيمة متغير البيئة HTTP_PORT. إذا لم يتم تعريف متغير البيئة هذا ، فإن القيمة الافتراضية هي 3000.

الصق التعليمة البرمجية التالية في الصفحة الرئيسية> hr_app> services> web-server.js

 const http = require('http'); const express = require('express'); const webServerConfig = require('../config/web-server.js'); let httpServer; function initialize() { return new Promise((resolve, reject) => { const app = express(); httpServer = http.createServer(app); app.get('/', (req, res) => { res.end('Hello World!'); }); httpServer.listen(webServerConfig.port) .on('listening', () => { console.log(`Web server listening on localhost:${webServerConfig.port}`); resolve(); }) .on('error', err => { reject(err); }); }); } module.exports.initialize = initialize; 

خطوط 1-3: وحدات متعددة المطلوبة. يتم تضمين الوحدة النمطية http في Node.js ، ولكن يلزم تثبيت الوحدة النمطية Express عبر npm.

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

الأسطر 9-10: يتم إنشاء تطبيق سريع جديد (والذي هو في الواقع مجرد وظيفة) ثم يتم استخدامه لإنشاء خادم http من خلال وحدة http.

الأسطر 12-14: يتم استخدام أسلوب الحصول على التطبيق لإضافة معالج لطلبات GET التي تصل إلى مسار الجذر (/). سيتم استدعاء وظيفة رد الاتصال عند استلام مثل هذا الطلب ، وسوف تستخدم المعلمة "res" (res) لإرسال الرد "Hello World!" للعميل.

الأسطر 16-24: يتم استخدام طريقة استماع الخادم للربط بالمنفذ المحدد وبدء الاستماع إلى الطلبات الواردة.

السطر 28: تصدير الوحدة النمطية بحيث يمكن استخدامها خارجيًا

الصق التعليمة البرمجية التالية في الملف Home> hr_app> index.js

 const webServer = require('./services/web-server.js'); async function startup() { console.log('Starting application'); try { console.log('Initializing web server module'); await webServer.initialize(); } catch (err) { console.error(err); process.exit(1); // Non-zero failure code } } startup(); 

نقوم بتوصيل وحدة خادم الويب ، ثم تحدد وتطلق على وظيفة بدء التشغيل غير المتزامن. نظرًا لأن وظيفة التهيئة لخادم الويب تُرجع وعدًا ، يمكنك استخدامه مع async / await ولفه في كتلة try-catch. إذا نجحت وظيفة التهيئة ، سيعمل خادم الويب ؛ خلاف ذلك ، سيتم اكتشاف ومعالجة أي استثناءات. كل ما عليك فعله الآن هو تهيئة npm وتثبيت Express - ثم يمكنك بدء تشغيل التطبيق. قم بتشغيل الأوامر التالية في محطة طرفية من دليل hr_app.

 npm init -y npm install express -s node . 

يتم استخدام الأمر init npm لإنشاء ملف package.json ، والذي يستخدمه npm كملف بيان (العلم -y يقبل الخيارات الافتراضية). يتم استخدام الأمر npm install لتثبيت صريح (تضيف علامة -s صريحة إلى قائمة التبعية في package.json). يخزن Npm الوحدات النمطية التي تقوم بتثبيتها في دليل node_modules. كما أنه ينشئ ملفًا يسمى package.lock.json لتوفير شجرة متطابقة لفريق التطوير.

هل ترى الرسالة خادم الويب يستمع على المضيف المحلي: 3000؟ مبروك ، لقد قمت بإنشاء خادم سريع على أساس!

وهنا هو ، آخر "مرحبا العالم". على الرغم من أنها ليست ممتعة بشكل خاص ، إلا أنها خطوة أولى مهمة لواجهة برمجة التطبيقات.

عندما تكون جاهزًا ، يمكنك إيقاف تشغيل الخادم عن طريق العودة إلى الجهاز والضغط على ctrl + c.

صورة

الاغلاق التي تسيطر عليها


أثناء إيقاف التشغيل بالضغط على Ctrl + C ، لا يمكنك التحكم في كيفية حدوث ذلك. للتحكم في عملية إيقاف التشغيل ، تحتاج إلى إغلاق خادم الويب بشكل صريح والخروج من عملية Node.js.

الصق التعليمة البرمجية التالية في الصفحة الرئيسية> hr_app> services> web-server.js

 // *** previous code above this line *** function close() { return new Promise((resolve, reject) => { httpServer.close((err) => { if (err) { reject(err); return; } resolve(); }); }); } module.exports.close = close; 

تقوم دالة الإغلاق بإرجاع وعد يتم حله عندما يغلق خادم الويب بنجاح. توقف طريقة httpServer.close عن إنشاء اتصالات جديدة ، ولكنها لا تفرض إغلاق الاتصالات المفتوحة بالفعل. اعتمادًا على عدد الاتصالات المفتوحة وما تفعله ، قد تحتاج إلى الانتظار قليلاً حتى يعمل رد الاتصال. على الرغم من أنك لن تفعل ذلك في هذه الوحدة ، يمكنك استخدام وحدات مخصصة للرمز أو npm مثل http-shutdown لإجبار الاتصالات المفتوحة على الإغلاق.

الصق التعليمة البرمجية التالية في الملف Home> hr_app> index.js

 // *** previous code above this line *** async function shutdown(e) { let err = e; console.log('Shutting down'); try { console.log('Closing web server module'); await webServer.close(); } catch (e) { console.log('Encountered error', e); err = err || e; } console.log('Exiting process'); if (err) { process.exit(1); // Non-zero failure code } else { process.exit(0); } } process.on('SIGTERM', () => { console.log('Received SIGTERM'); shutdown(); }); process.on('SIGINT', () => { console.log('Received SIGINT'); shutdown(); }); process.on('uncaughtException', err => { console.log('Uncaught exception'); console.error(err); shutdown(err); }); 

تتعلق أحداث SIGINT و SIGTERM بالإشارات التي يمكن إرسالها إلى عملية لإغلاقها ، على سبيل المثال ، عند الضغط على ctrl + c. سيحدث حدث uncaughtException عند طرح خطأ JavaScript ، ولكن لا يتم اكتشافه ، ومعالجته باستخدام عبارة try-catch. حاول بدء وإغلاق التطبيق مرة أخرى. ستكتشف أن كل شيء يعمل بشكل صحيح عندما ترى رسائل "إيقاف التشغيل" في الجهاز.

التسجيل على الخادم


هناك شيء آخر يكمل وحدة خادم الويب الخاصة بنا: تسجيل HTTP. هناك العديد من الوحدات النمطية التي يمكنك استخدامها لهذا النوع من تسجيل الدخول ، ولكن مورغان هي واحدة من الوحدات البسيطة. دعونا تثبيت مورغان باستخدام npm.

 npm install morgan -s 

ثم أضف السطر التالي إلى services / web-server.js تحت السطر الذي يتطلب التعبير عن (السطر 2):

 const morgan = require('morgan'); 

يمكنك الآن تمكين وظيفة morgan كبرنامج وسيط يتم من خلاله معالجة جميع الطلبات باستخدام app.use. أضف هذا السطر قبل الاتصال بـ app.get ، والذي يعرض الرسالة "hello world".

 // Combines logging info from request and response app.use(morgan('combined')); // *** app.get call below this line *** 

لاحظ أن التطبيق. ينشئ خط أنابيب من وظائف الوسيطة التي يمكن أن تتفاعل مع طلبات HTTP والردود. سيتم تنفيذ وظائف الوسيطة بالترتيب الذي تم تمكينها به. أعد تشغيل التطبيق وتثبيت الجهاز بحيث يمكنك رؤيته والمتصفح في نفس الوقت. في كل مرة تقوم فيها بإعادة تحميل الصفحة ، سترى إدخال سجل جديد يظهر في الجهاز. بشكل افتراضي ، يقوم morgan بتمرير معلومات السجل إلى STDOUT (والذي يتم عرضه في الجهاز الطرفي).

ستغطي المقالة التالية أساسيات العمل مع قواعد البيانات ، بما في ذلك تجمعات الاتصال ، والتي ستساعدك على فهم وإنشاء واجهة برمجة تطبيقات REST لـ Node.js.

Source: https://habr.com/ru/post/ar473234/


All Articles