6.1 · حالات عملية موجهة

المستوى 6 · في الممارسة

6.1حالات عملية موجهة

الهدف: تحويل الإتقان التقني لـ Node إلى منعكسات إنتاج موثوقة وفعالة وآمنة.
الوقت المقدّر: 14 دقيقة · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

  • ركّب : مشروع Node حقيقي يتسلسل هيكلة ← واجهة REST (API REST) ← تخزين دائم (Persistence) ← تأمين ← توثيق الموثوقية ← تسليم.
  • ركّب فوق : الزمن الحقيقي (WebSockets) يُضاف على الواجهة الموجودة، موثقاً ومنظماً في غرف (Rooms).
  • سلّم : نمّط (TypeScript)، وحَوِّ إلى حاويات (Docker)، وانشر بمتغيرات البيئة (Environment variables) وHTTPS وCI/CD.

خيط ساليم — بعد سنة : ورشتان تعملان في الجزائر

ساليم، مطور مبتدئ في الجزائر، يراجع ورشتيه الأبرز في السنة : الواجهة الخلفية (Back-end) لإدارة المهام حسب المستخدم التي قادها من npm init حتى النشر، والدردشة المباشرة المضافة بعدها على نفس الواجهة. الحالتان أدناه تستعيدان تسلسله : وضع الأساس، وتصميم، وتخزين، وتأمين، وتوثيق الموثوقية، وتسليم — ثم الدفع نحو الزمن الحقيقي.

كل حالة تتبع السياق ← الخطوات ← النتيجة : أعد تنفيذها على مشاريعك.

تركيب اللبنات معاً

وضعت المستويات السابقة اللبنات (JavaScript الحديث، والبرمجة غير المتزامنة (Asynchronous)، والوحدات الأصلية (Native modules)، وExpress، وقواعد البيانات، وواجهات REST (API REST)، والأمن، والزمن الحقيقي، وTypeScript، وDocker، والنشر (Deployment)) ؛ هنا نركبها في ظروف حقيقية : ننطلق من حاجة ملموسة، ونهيكل، ونؤمن، ونوثق الموثوقية ونسلم. حالتان مفصلتان من الألف إلى الياء.

الحالة 1 — واجهة REST (API REST) آمنة، من التصميم إلى النشر

السياق: واجهة خلفية لإدارة المهام حسب المستخدم : واجهة REST نظيفة، وتخزين دائم موثوق، وتوثيق (Authentication) متين ونشر متقن.

Déroulé :

  1. وضع المشروع (N1) : npm init، وهيكلة بطبقات (routes / controllers / models)، وESM أو CommonJS معلن، ونصوص npm ؛ و.gitignore ‏(node_modules و.env).
  2. تصميم الواجهة REST (N4.1) : موارد /api/v1/tasks، وطرق HTTP دلالية (GET وPOST وPUT وDELETE)، ورموز حالة صحيحة، وexpress.Router لكل مورد.
  3. التخزين الدائم (N3) : نموذج Mongoose (أو Prisma) بمخطط متحقق منه، وCRUD بـ async/await، وعلاقات مستخدم ↔ مهام.
  4. التأمين (N4.2) : كلمات مرور مجزأة بـ bcrypt، وJWT متحقق منه عبر وسيط (Middleware) على المسارات المحمية، وتفويض (كل واحد لا يرى إلا مهامه)، وHelmet، وأسرار في .env.
  5. توثيق الموثوقية (N4.4) : التحقق من المدخلات (Zod)، ووسيط مركزي لتدبير الأخطاء، واختبارات (Jest) على المنطق والمسارات.
  6. التسليم (N5) : التنميط بـ TypeScript، والتحويل إلى حاويات (Docker + Compose للتطبيق + القاعدة)، والنشر على PaaS بمتغيرات البيئة وHTTPS وCI/CD.

النتيجة: واجهة REST كاملة، مهيكلة وآمنة ومختبرة ومنشورة — المُسلَّم المركزي لمطور الواجهات الخلفية (Back-end) بـ Node، من الشيفرة إلى الإنتاج.

الحالة 2 — خاصية لحظية (دردشة) مضافة على الواجهة

السياق: إضافة دردشة مباشرة إلى واجهة الحالة 1 : رسائل فورية حسب الغرفة، موثقة، دون إعادة تحميل الصفحة.

Déroulé :

  1. فهم الحاجة (N4.3) : يجب على الخادم دفع (Pousser) الرسائل — مستحيل بطلب-جواب HTTP التقليدي، ومن هنا المقابس (WebSockets).
  2. تثبيت Socket.IO على خادم HTTP/Express الموجود، بإعادة استعمال التطبيق.
  3. توثيق الاتصالات (N4.2) : التحقق من JWT عند اتصال المقبس (Socket)، دون الثقة بالعميل.
  4. إصدار الأحداث والاستماع إليها : العميل يصدر «message»، والخادم يبثه إلى أعضاء الغرفة المعنية.
  5. التنظيم في غرف (Rooms) : الانضمام إلى غرفة، والبث داخلها فقط، وتدبير إعادة الاتصال.
  6. تحمل الحمل (N5.2) : Node يستوعب آلاف الاتصالات الدائمة ؛ توقع التوسع (تطبيقات بلا حالة، وJWT) إذا نمت الحركة.

النتيجة: دردشة لحظية موثقة، منظمة في غرف، مضافة بنظافة على الواجهة — خاصية عصرية تستغل نقطة قوة Node (الاتصالات الدائمة).

خطأ شائع في الفهم: « نسخ الحالات حرفياً ». خطأ. الحالات تُظهر ترتيب تركيب (وضع الأساس، وتصميم، وتخزين، وتأمين، وتوثيق الموثوقية، وتسليم)، لا وصفة للنسخ : استعد الترتيب، وكيّف القاعدة والتوثيق والاستضافة مع مشروعك.
نص المخطط (SEO / قارئات الشاشة / الترجمة): السلسلة الكاملة : 1) وضع المشروع (هيكلة بطبقات، ونصوص، و.gitignore). 2) تصميم الواجهة REST (موارد، وطرق، ورموز، وRouter). 3) التخزين الدائم (مخطط متحقق منه، وCRUD غير متزامن، وعلاقات). 4) التأمين (bcrypt وJWT والتفويض وHelmet و.env). 5) توثيق الموثوقية (تحقق، وأخطاء مركزية، واختبارات). 6) التسليم (TypeScript وDocker وPaaS وHTTPS وCI/CD) ثم إضافة الزمن الحقيقي (Socket.IO موثق، وغرف). الدرس : ترتيب التركيب هو ما يجعل التطبيق موثوقاً، لا لبنة معزولة.

نص جاهز للقول — تأطير مشروع Node قبل الترميز (30 ثانية)

« حاجتنا : [إدارة مهام حسب المستخدم]. مواردنا : [كذا مسارات]، وطرقنا : [REST + JWT]. نضع الهيكلة بطبقات، ونتحقق من المخطط، ونؤمن منذ البداية ونسلم حتى النشر. »

نموذج نسخ ولصق — مسار Express محمي

// مسار محمي : Router + وسيط JWT (Middleware) + متحكم
const express = require("express");
const router = express.Router();
function verifierJeton(req, res, next) {
  const jeton = req.headers.authorization;
  if (!jeton) {
    return res.status(401).json({ erreur: "Jeton manquant" });
  }
  return next();
}
router.get("/tasks", verifierJeton, async (req, res, next) => {
  try {
    const taches = await listerTaches(req.utilisateur);
    res.json(taches);
  } catch (erreur) {
    next(erreur);
  }
});
module.exports = router;

شركة صغيرة جداً / ميزانية صغيرة

حالة واحدة معادة التنفيذ على حاجة بسيطة : واجهة بموردين، وقاعدة وحيدة، ونشر مباشر على PaaS.

شركة صغيرة ومتوسطة في الجزائر

تكييف النشر مع الواقع المحلي : مضيف متاح، وذروات نشاط، ونسخ احتياطية ومرجع معين.

عن بعد / هجين

مضاعفة التتبع عن بعد : متغيرات بيئة موثقة، وخط أنابيب CI/CD ووصول مكتوب.

بين الثقافات

التحقق من الاستعمالات المحلية قبل نقل حالة : يجب أن تخاطب التسميات والأدوار وقواعد التفويض الفريق.

حذر: تذكير عام : الأسرار (مفاتيح، ورموز) وبيانات المستخدمين تُحمّلك المسؤولية — ضعها في متغيرات بيئة لا تُنسخ أبداً، وأعد توليد كل مفتاح مكشوف واعرض على المرجع المعين ؛ هذا الدليل لا يقدم رأياً قانونياً.

تحدي 48 ساعة — طبّق غداً

خذ مشروعاً حقيقياً واحداً واكتب سلسلته في 6 أوقات (وضع الأساس ← تصميم ← تخزين ← تأمين ← توثيق الموثوقية ← تسليم). حدد الخطوة التالية.

قائمة الخروج من القسم
  • أعرف تركيب اللبنات في تطبيق كامل.
  • عندي نموذج مسار محمي قابل لإعادة التنفيذ لمشروعي.
  • أنجزت تحدي 48 ساعة أو برمجت تاريخه.
تقييم ذاتي 1-5 : تسلسل الخطوات ؟الأمن والتسليم مغطيان ؟
تحقّق من فهمك

ساليم يريد إيصال واجهة مهامه إلى الإنتاج. أي تسلسل يحترم الدليل ؟