كيفية بناء RESTful API باستخدام Node.js و Express.js الجزء الثاني

ك

في المرة السابقة تحدثنا عن كيفية اعداد بيئة العمل وتطرقنا الى جزء بسيط من اعداد الـ API الخاصة بنا.

كيفية بناء RESTful API باستخدام Node.js و Express.js الجزء الأول

في هذه المرة باذن الله سنكمل مابدأناه.

أولاً لتنظيم العمل ننشئ ملف جديد يحتوي على الاعدادات الرئيسية ونسميه “config.js”

سيحتوي على رابط قاعدة البيانات و رقم الـ “Port”

module.exports = {
 'database':'your mongodbLink',
 'port': process.env.PORT || 3000,
};

سنحتاج الان الى الاتصال بقاعدة البيانات MongoDB يمكنك تنصيبها على جهازك من الموقع الرسمي أو على mLab وهي خدمة تمكنك من انشاء واستخدام قاعدة بيانات بمساحة 500 ميجا مجاناً

بعد تنصيبها او استخدامك لـ mLab ستحصل على رابط لقاعدة البيانات قم باضافته في ملف ال config ونستدعي الملف في index.js

var config = require('./config');

ونتصل بقاعدة البيانات بهذا الأمر 

mongoose.connect(config.database,function(err){
 if(err){
 console.log(err);
 return;
 }
 console.log('Connected to database');
});

ونعدل ايضا 

var PORT = config.port;

ونجرب الاتصال

نريد الان ان نصيغ شكل البيانات التي نريد تخزينها 

ننشئ ملف جديد ونسميه company.js

وستكون محتوياته 

var mongoose = require('mongoose');
//ال model ينشى من خلال تعريف ال schema اولاً
var Schema = mongoose.Schema;

//انشاء الschema او الشكل الخاص ببيانات الشركة
var companySchema = new Schema({
 name: {
 type: String,
 unique: true,
 required: true
 },
 description: String,
 Phone: {
 type: Number,
 unique: true
 required: true
 }
});
//تصدير البيانات لاستعمالها
module.exports = mongoose.model('Company',companySchema);

ماقمنا بعمله هو استدعاء Mongoose و استدعاء Schema منها لكي نشكل البيانات وانشاء شكل البيانات الذي نريده

والذي يحتوي على اسم الشركة من النوع String ومطلوبٌ إدخاله ولابد ان يكون فريداً

وبيانات الشركة من النوع String اختياريه

ورقم الهاتف للشركة من النوع Number ومطلوبٌ إدخاله ولابد ان يكون فريداً.

نحن الان اعددنا تقريبا كل مانريده لعمل الـ API.

نذهب للملف الرئيسي index.js 

ونستخدم الAPI 

//نستخدم ال API 
var api = require('./api')(express);
app.use('/api',api);

سيكون الرابط الذي سنستخدمه بهذا الشكل 

localhost:3000/api/xxxxx

ننشئ ملف جديد ونسميه api.js

ونبدأ بالمحتوى 

var Company = require('./company');

//لتصدير الدالة التي ستحتوي على محتويات ال API كي نستيطع استخدامها فيما بعد
module.exports = function(express){
 /*انشاء ال router الخاص بنا 
 الذي سيحتوي على المسارات الخاصة بالapi */
 var api = express.Router();
 return api;
};

ملاحظة بسيطة:

عند تعاملنا مع الـ API لن نتعامل مع المتصفح مباشرة  بل سنتعامل مع اضافة Postman وهي تمكنا من ارسال ال Requests بالطرق المختلفة POST ,GET , etc …. ومشاهدة الResponse.

سنتعامل الان مع اول مسار لنا وهو /api/company

وسيكون له نوعين اما GET او POST

اذا كان نوع الاستدعاء GET فسنعيد كل الشركات المخزنة في صيغة JSON.

ولو كان POST فهذا يعني انه سيضيف شركة جديدة وسنستقبل البيانات ونخزنها.


api.route('/company')
 .get(function(req,res){
 Company.find({},function(err,data){
 if(err){
 res.sendStatus(400);
 return;
 }
 res.json(data);
 });
 }).post(function(req,res){
 var company = new Company({
 name: req.body.name,
 description : req.body.description,
 Phone: req.body.Phone
 });
 company.save(function(err){
 if(err){
 res.sendStatus(406);
 return;
 }
 res.status(200).json({message: 'company has been created'});
 });
 });

ولنجرب سوياً عن طريق Postmen

نختار نوع POST لنجرب ارسال بيانات

ونختار Body و formurlencoded

ونعبئ الحقول بالاسماء الخاصة ببيانات الشركة ونرسلها Send

ممتاز 😀 نرى هنا رسالة انه تم انشاء بيانات الشركة بنجاح.

يمكننا التحقق من جميع البيانات المخزنة عن طريق استخدام GET

وسيكون الرد بجميع البيانات المخزنة كالتالي:

وكما تلاحظ فان Morgn يقوم بتتبع كل الrequests و ال responses:

ولكي نقوم بحذف شركة معينة او تحديث بياناتها نقوم بكتابة الكود التالي:

api.route('/company/:name')
 .delete(function(req,res){
 Company.findOneAndRemove({name: req.params.name},function(err){
 if(err){
 res.status(404).json({message: "user not found"});
 return;
 }
 res.status(200).json({message:"Comapny removed"});
 });
 }).put(function(req,res){
 Company.findOneAndUpdate({name: req.params.name},
 {$set:{name: req.body.name,description:req.body.description,Phone: req.body.Phone}},
 function(err){
 if(err){
 res.status(400).json({message:err});
 return;
 }
 res.status(200).json({message: "Updated"});
 });
 });

سنقوم باضافة اسم الشركة في الرابط ونبحث عنه ونقوم بحذفه يمكنك جعلها بال ID او برقم الهاتف.

عند ظهور اي اخطاء سيطبع له رسالة user not found مع حالة 404

انما في حال حذف المستخدم سنخبره بانه تم المسح مع حالة 200 OK .

وفي حالة التحديث “PUT” سيقوم بجلب بيانات المستخدم وتعديلها حسب ماسيتم ارساله من ال Form .

في نهاية الأمر سيكون ملف الـ API بهذا الشكل :

أرجو ان يكون الشرح واضح وان كان هناك اي استفسار فضلاً اتركه في تعليق وساقوم بالاجابة عليه.

يمكنك تحميل المشروع كاملاً من GitHub على الرابط التالي

عن الكاتب

أحمد مجدي

Full Stack Software Developer , Geek

6 تعليقات

اترك رداً على أحمد مجدي الغاء الرد

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.