مقدمة: REST API باستخدام JavaScript — بسرعة وسهولة
تطوير الويب الحديث لا يمكن تصوره بدون API. REST (Representational State Transfer) هو النمط المعماري الأكثر شيوعًا لإنشاء خدمات الويب. إذا كنت تريد إنشاء backend لتطبيقك بسرعة أو تعلم أساسيات تطوير الخادم، فإن Node.js و Express هما الخيار الأمثل.
في هذه المقالة، سنكتب خلال 30 دقيقة REST API كامل باستخدام JavaScript. ستتعلم كيفية إعداد الخادم، تنظيم المسارات (routing)، تنفيذ عمليات CRUD (Create, Read, Update, Delete) واختبار API باستخدام Postman. لا نظرية زائدة — فقط تطبيق عملي. هيا بنا!
1. تهيئة البيئة وتثبيت التبعيات
قبل كتابة الكود، تأكد من تثبيت Node.js (الإصدار 14 أو أحدث) على جهاز الكمبيوتر الخاص بك. يمكنك التحقق من ذلك باستخدام الأمر:
node -v
npm -v
أنشئ مجلدًا جديدًا للمشروع وقم بتهيئة package.json:
mkdir my-rest-api
cd my-rest-api
npm init -y
الآن سنقوم بتثبيت Express — إطار عمل بسيط ومرن لـ Node.js. سنقوم أيضًا بتثبيت body-parser لمعالجة طلبات JSON (في الإصدارات الحديثة من Express يكون مدمجًا، لكن للتوضيح سنضيفه صراحةً):
npm install express body-parser
هيكل المشروع سيكون بسيطًا:
app.js— ملف الخادم الرئيسيroutes/— مجلد المساراتdata/— مجلد البيانات الاختبارية (محاكاة لقاعدة البيانات)
2. إنشاء خادم أساسي باستخدام Express
أنشئ ملف app.js واكتب الكود التالي:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const PORT = 3000;
// Middleware لمعالجة JSON
app.use(bodyParser.json());
// مسار اختباري بسيط
app.get('/', (req, res) => {
res.send('REST API يعمل!');
});
// تشغيل الخادم
app.listen(PORT, () => {
console.log(`الخادم يعمل على http://localhost:${PORT}`);
});
قم بتشغيل الخادم باستخدام الأمر node app.js وافتح في المتصفح http://localhost:3000. يجب أن ترى الرسالة "REST API يعمل!". تهانينا، لقد أنشأت للتو أول خادم ويب باستخدام Node.js!
لاحظ: body-parser يقوم بتحويل البيانات الواردة إلى تنسيق JSON، وهو ضروري لطلبات POST و PUT.
3. تنظيم المسارات وعمليات CRUD
الآن دعنا نضيف بيانات حقيقية. أنشئ مجلد data وداخله ملف items.js مع مصفوفة اختبارية:
const items = [
{ id: 1, name: 'تعلم Node.js', completed: false },
{ id: 2, name: 'كتابة API', completed: true },
{ id: 3, name: 'نشر المقال', completed: false }
];
module.exports = items;
أنشئ مجلد routes وملف items.js داخله. هنا سنصف جميع المسارات للعمل مع المهام (to-do list):
const express = require('express');
const router = express.Router();
let items = require('../data/items');
// GET /api/items — الحصول على جميع العناصر
router.get('/', (req, res) => {
res.json(items);
});
// GET /api/items/:id — الحصول على عنصر حسب ID
router.get('/:id', (req, res) => {
const id = parseInt(req.params.id);
const item = items.find(i => i.id === id);
if (!item) return res.status(404).json({ message: 'العنصر غير موجود' });
res.json(item);
});
// POST /api/items — إنشاء عنصر جديد
router.post('/', (req, res) => {
const newItem = {
id: items.length + 1,
name: req.body.name,
completed: req.body.completed || false
};
items.push(newItem);
res.status(201).json(newItem);
});
// PUT /api/items/:id — تحديث عنصر
router.put('/:i
```