هذا اخر عمل انجزته مؤخرا
نوع العمل
تطوير واجهة برمجية (GraphQL API) متكاملة لإدارة المستخدمين، المنشورات، والتعليقات، مع التركيز على بناء هيكل مرن وقابل للتوسع يدعم العمليات الأساسية وإدارة العلاقات بين البيانات بكفاءة عالية.
التقنيات المستخدمة
Node.js - Express.js - GraphQL - Apollo Server - MongoDB - Mongoose - JWT - Cookie Parser - Bcrypt
أبرز المميزات
* تصميم API باستخدام GraphQL يسمح بجلب البيانات المطلوبة فقط بدلًا من استرجاع بيانات زائدة، مما يحسن الأداء ويقلل حجم الاستجابات.
* تنفيذ عمليات CRUD كاملة للمستخدمين، المنشورات، والتعليقات مع ربط العلاقات بين الكيانات المختلفة بشكل منظم.
* دعم Queries وMutations لإدارة عمليات القراءة والتعديل والإضافة والحذف بطريقة مرنة وسهلة التوسعة.
* إنشاء نظام مصادقة باستخدام JWT مع تخزين التوكن داخل Cookies لإدارة الجلسات بشكل أكثر أمانًا.
* تشفير كلمات المرور باستخدام Bcrypt لحماية بيانات المستخدمين.
* تنظيم بنية المشروع بطريقة واضحة تسهّل إضافة Features جديدة أو تحويل المشروع لاحقًا إلى Microservices أو GraphQL Federation.
* استخدام Mongoose للتعامل مع قاعدة البيانات وبناء الـ Schemas والعلاقات بين المجموعات بشكل احترافي.
لماذا تم استخدام GraphQL؟
تم اختيار GraphQL لأنه يمنح الواجهة الأمامية مرونة أكبر في طلب البيانات، حيث يستطيع العميل تحديد الحقول المطلوبة فقط بدلًا من الاعتماد على Endpoints متعددة كما هو الحال في REST APIs.
هذا يقلل من عدد الطلبات المرسلة للخادم ويحسن الأداء، خصوصًا في التطبيقات التي تحتوي على علاقات مترابطة مثل المستخدمين والمنشورات والتعليقات. كما أن GraphQL يجعل تطوير الواجهات الأمامية أكثر سلاسة لأنه يوفر نقطة وصول واحدة للبيانات مع هيكل استعلام واضح وقابل للتوسع.
آلية التنفيذ
بدأ تنفيذ المشروع بإعداد خادم Express وربطه مع Apollo Server لإنشاء Endpoint خاص بـ GraphQL. تم تعريف الـ Schema باستخدام graphql-tag وكتابة الـ TypeDefs الخاصة بالكيانات والعلاقات بينها، ثم تجهيز الـ Resolvers اللازمة لمعالجة Queries وMutations والتفاعل مع قاعدة البيانات.
تم ربط المشروع بقاعدة بيانات MongoDB باستخدام Mongoose لإنشاء الـ Models وإدارة العلاقات بين البيانات. كما تم تنفيذ نظام المصادقة باستخدام JWT وتخزين التوكن داخل Cookies، بالإضافة إلى استخدام Bcrypt لتشفير كلمات المرور قبل تخزينها.
ركز المشروع على بناء API منظمة وقابلة للتوسع مع فصل واضح بين طبقات التطبيق ومنطق العمل الخاص بالبيانات.