مقدمة: لماذا REST API باستخدام JavaScript سريع وبسيط
إنشاء REST API خاص بك هو إحدى الخطوات الأولى نحو فهم تطوير الواجهة الخلفية. إذا كنت بالفعل على دراية بـ JavaScript، يمكنك كتابة جزء الخادم من التطبيق حرفيًا في نصف ساعة. في هذه المقالة، سنشرح كيفية كتابة REST API باستخدام JavaScript مع Node.js وإطار العمل Express. سننشئ API بسيطًا لإدارة قائمة المهام (To-Do List) مع دعم عمليات CRUD القياسية: إنشاء وقراءة وتحديث وحذف البيانات.
هذا الدليل مثالي للمبتدئين الذين يرغبون في تشغيل أول خادم لهم بسرعة وفهم كيفية عمل الطلبات والمسارات والبرمجيات الوسيطة (middleware). في نهاية المقال، سيكون لديك API عملي يمكنك اختباره في Postman أو المتصفح.
الخطوة 1: إعداد البيئة وتثبيت التبعيات
قبل كتابة الكود، تأكد من تثبيت Node.js (الإصدار 16 أو أحدث). إذا لم يكن مثبتًا، قم بتنزيله من الموقع الرسمي. للتحقق، نفذ في الطرفية (terminal):
node -vnpm -vالآن، أنشئ مجلدًا للمشروع وقم بتهيئته:
mkdir my-apicd my-apinpm init -yقم بتثبيت التبعية الرئيسية - إطار العمل Express، الذي يبسط العمل مع HTTP بشكل كبير:
npm install expressسنقوم أيضًا بتثبيت nodemon (اختياري) لإعادة تشغيل الخادم تلقائيًا عند تغيير الكود:
npm install --save-dev nodemonأضف سكريبت التشغيل في ملف package.json:
"scripts": { "start": "node index.js", "dev": "nodemon index.js"}الخطوة 2: إنشاء خادم أساسي وأول مسار
أنشئ ملفًا باسم index.js في جذر المشروع. لنبدأ بتوصيل Express وتشغيل الخادم على المنفذ 3000:
const express = require('express');const app = express();const PORT = 3000;
// Middleware لتحليل JSONapp.use(express.json());
// مسار اختباريapp.get('/', (req, res) => { res.send('مرحبًا بالعالم! API يعمل.');});
app.listen(PORT, () => { console.log(`الخادم يعمل على http://localhost:${PORT}`);});قم بتشغيل الخادم باستخدام الأمر npm run dev (إذا كنت تستخدم nodemon) أو node index.js. افتح المتصفح وانتقل إلى العنوان http://localhost:3000 - يجب أن ترى الرسالة "مرحبًا بالعالم! API يعمل."
أهنئك! لقد كتبت للتو REST API باستخدام JavaScript. الآن سنضيف المنطق الفعلي.
الخطوة 3: تنفيذ عمليات CRUD لقائمة المهام
لننشئ مخزن بيانات مؤقتًا في الذاكرة (مصفوفة من الكائنات). في مشروع حقيقي، ستقوم بتوصيل قاعدة بيانات، ولكن لهذا الدرس الذي يستغرق 30 دقيقة، هذا كافٍ.
let tasks = [ { id: 1, title: 'تعلم Express', completed: false }, { id: 2, title: 'كتابة API', completed: true }];
let nextId = 3;الآن سنقوم بتنفيذ أربعة مسارات رئيسية:
GET /tasks — الحصول على جميع المهام
app.get('/tasks', (req, res) => { res.json(tasks);});POST /tasks — إنشاء مهمة جديدة
app.post('/tasks', (req, res) => { const { title } = req.body; if (!title) { return res.status(400).json({ error: 'عنوان المهمة مطلوب' }); } const newTask = { id: nextId++, title, completed: false }; tasks.push(newTask); res.status(201).json(newTask);});PUT /tasks/:id — تحديث مهمة
app.put('/tasks/:id', (req, res) => { const id = parseInt(req.params.id); const { title, completed } = req.body; const task = tasks.find(t => t.id === id); if (!task) { return res.status(404).json({ error: 'المهمة غير موجودة' }); } if (title !== undefined) task.title = title; if (completed !== undefined) task.compl