هذه الأداة تحول قاعدة بيانات SQL إلى خلفية برمجية فوراً (Directus)

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00حسناً، كم مرة قمت بإعادة بناء نفس الخلفية البرمجية بالضبط؟
00:00:04عمليات الـ CRUD، والمصادقة، ولوحة التحكم، ورفع الملفات.
00:00:07في كثير من الأحيان، ما يبدو كأنه بناء هو في الواقع مجرد إعادة بناء.
00:00:10ماذا لو كان بإمكانك توجيه أداة واحدة إلى قاعدة بيانات SQL الحالية والحصول على خلفية كاملة؟
00:00:15هذا هو Directus، واجهة برمجة تطبيقات فورية ولوحة تحكم لإدارة محتوى قاعدة بيانات SQL.
00:00:21بدأ الكثير من المطورين يدركون أنهم كانوا يقومون بذلك بالطريقة الصعبة طوال الوقت.
00:00:25دعني أريك كيف يعمل كل هذا في بضع دقائق فقط.
00:00:30[موسيقى]
00:00:33أكبر مشكلة في الخلفية البرمجية لمعظمنا ليست التعقيد، بل التكرار.
00:00:38نحن لا نحل مشاكل جديدة، بل نقوم بكتابة نفس الكود مراراً وتكراراً،
00:00:42وهذا يستهلك وقتنا حقاً.
00:00:44Directus يختصر كل ذلك.
00:00:46فهو يتصل مباشرة بقواعد بيانات Postgres أو MySQL أو Oracle.
00:00:50لا حاجة لعمليات ترحيل البيانات، ولا لإعادة بناء المخطط في مكان آخر.
00:00:53نحصل فوراً على واجهات برمجة تطبيقات REST و GraphQL،
00:00:57وصلاحيات على مستوى الحقول، واشتراكات فورية،
00:01:01وتدفقات عمل وأتمتة، ومعالجة ملفات، وواجهة إدارة نظيفة.
00:01:05الآن، الجزء الممتع هنا هو أن قاعدة بياناتك تبقى كما هي.
00:01:08إنها ليست مجرد طبقة مكررة.
00:01:10وهذا الأمر أهم بكثير مما يبدو عليه.
00:01:12الآن دعني أريك.
00:01:13إذا كنت تستمتع بالأدوات مفتوحة المصدر ونصائح البرمجة لتسريع سير عملك،
00:01:17تأكد من الاشتراك.
00:01:18لدينا فيديوهات تصدر طوال الوقت.
00:01:20حسناً، لنبدأ الآن من الصفر تماماً مع تثبيت نظيف لـ Directus،
00:01:24بدون جداول قاعدة بيانات، ولا أي شيء محمل مسبقاً.
00:01:27مجرد صفحة بيضاء تماماً بعد أن أنشأت حساباً هنا بالفعل.
00:01:32وبدلاً من الاتصال بشيء موجود مسبقاً،
00:01:34سأقوم ببناء تطبيق كامل لإدارة الطلبات في حوالي دقيقة واحدة فقط.
00:01:39أولاً، أقوم بإنشاء مجموعة (Collection) وسأسميها "الطلبات" (Orders)، هكذا تماماً.
00:01:45هذا كل شيء.
00:01:45الآن أصبح لدى التطبيق مكان لتخزين البيانات، ويمكننا إضافة المزيد من التفاصيل فيه الآن.
00:01:51سأقوم بتحديد وتجاوز الحقول التي نحتاجها هنا،
00:01:54أشياء مثل العميل، والتاريخ، وكل تلك التفاصيل الممتعة.
00:01:58ثم يمكنني إضافة أي حقول أخرى يدوياً
00:02:00نعتقد أننا قد نحتاجها لشيء من هذا القبيل.
00:02:03فيمكنني مثلاً وضع اسم العميل، والبريد الإلكتروني، والمنتج كقائمة منسدلة،
00:02:08حيث يمكنني إضافة مفتاح وقيمة.
00:02:10يمكنني فعل ذلك للمبلغ والحالة.
00:02:13كل حقل يضيف المزيد من التفاصيل حول البيانات التي سنقوم بتخزينها.
00:02:16ولاحظوا ما هو مفقود هنا.
00:02:18حسناً، إنه الـ SQL.
00:02:19لا يوجد SQL.
00:02:20لا توجد عمليات ترحيل (Migrations).
00:02:22لا يوجد تنقل بين التبويبات لكتابة ملف مخطط (Schema).
00:02:25يتم الحفظ هنا في Directus مباشرة وفوراً.
00:02:28الآن يمكنني الانتقال إلى عرض المحتوى والبدء في إضافة الطلبات.
00:02:32يمكنني إضافة الطلب الأول هنا، مجرد حساب وهمي.
00:02:35سأضيف طلباً آخر.
00:02:36ثم يمكننا إضافة طلب ثالث، أليس كذلك؟
00:02:39لدينا ثلاثة طلبات مختلفة هنا في النظام.
00:02:42الآن لدي بعض البيانات الحقيقية هنا التي يمكننا البدء في التعامل معها.
00:02:45لكنها حالياً مفتوحة للجميع، مما يعني أن أي شخص يمكنه فعل أي شيء.
00:02:49لذا لنقم بإصلاح ذلك.
00:02:50كيف نصلح ذلك؟
00:02:51حسناً، من خلال الصلاحيات.
00:02:53لذا سأذهب إلى دور "العام" (Public Role).
00:02:55سأبحث عن تلك المجموعة التي أنشأناها، "الطلبات".
00:02:58يمكننا تفعيل القراءة فقط.
00:03:00وسأقوم بالتأكد من إيقاف كل شيء آخر هنا.
00:03:03أي الإنشاء، والتحديث، والحذف.
00:03:05كلها تم إلغاؤها.
00:03:06الآن أصبح الأمر أكثر انضباطاً وأماناً لما نريده.
00:03:10حسناً، هنا يبدأ الأمر يصبح رائعاً حقاً
00:03:12لأننا نستطيع القيام ببعض الأتمتة وبناء تدفقات عمل حول هذا الموضوع.
00:03:16سأذهب إلى هنا وسأقوم بإنشاء تدفق (Flow) جديد.
00:03:19سأعطيه اسماً بسيطاً جداً، ما هو هذا؟
00:03:22سأسميه "إشعار عند طلب جديد".
00:03:24اسم بسيط يوضح الغرض منه.
00:03:26وسأختار كل العناصر من المجموعة التي أنشأناها والتي تسمى "الطلبات".
00:03:31الآن يمكنني بناء مشغل (Trigger).
00:03:33وبالنسبة للمشغل، سأربطه بلحظة إنشاء عنصر جديد،
00:03:37تحديداً في مجموعة الطلبات تلك.
00:03:39لذا الآن في كل مرة يأتي فيها طلب جديد، سيحدث شيء ما.
00:03:43سأقوم بإضافة عملية (Operation).
00:03:44سنقوم بإرسال بريد إلكتروني.
00:03:46سأكتب موضوعاً للرسالة.
00:03:47سأضيف بريدي الإلكتروني إلى هذا.
00:03:49ثم في محتوى الرسالة، سأقوم بسحب بيانات الطلب.
00:03:52لذا في أي وقت يدخل فيه طلب جديد، سيتم دفع تلك البيانات إلى بريد إلكتروني.
00:03:56الآن يمكنني حفظ هذه العملية وسنحفظ التدفق وبذلك نكون قد انتهينا.
00:04:00حسناً، الآن شاهدوا هذا.
00:04:02سأعود للخلف.
00:04:03وفي ملف Docker compose الذي بدأت به، أضفت Mailpit لاختبار هذا.
00:04:07هذه مجرد طريقة بسيطة جداً لاختبار وظيفة إرسال البريد الإلكتروني.
00:04:11عندما أقوم بإنشاء طلب واحد آخر، تماماً كما فعلنا سابقاً، لا شيء معقد،
00:04:14لكن هذه المرة هناك شيء مختلف.
00:04:16هذا سيقوم الآن بتشغيل التدفق تلقائياً ويخرج بريد إلكتروني بالتفاصيل.
00:04:20لا يوجد منطق خلفي (Backend logic) هنا.
00:04:22لا يوجد ربط للأكواد ببعضها.
00:04:25لقد بدأ هذا من لا شيء، لا جداول، لا خلفية برمجية، لا هيكل حقيقي.
00:04:30وفي غضون دقائق قليلة، أصبح تطبيقاً عاملاً مع صلاحيات للبيانات ونعم،
00:04:33الأتمتة، والتي كانت الجزء الأروع.
00:04:35وهذا ما يجعل Directus يبدو رائعاً حقاً.
00:04:38إنه يشبه مزيجاً من منطق قواعد البيانات المرئي مع شيء مثل N8N أو Zapier مدمج بداخله،
00:04:43لكن هؤلاء ليسوا من ينافسهم في الحقيقة.
00:04:45إذن ما هو Directus بالضبط؟
00:04:47إنه منصة بيانات مفتوحة المصدر تعمل فوق قاعدة بيانات SQL الخاصة بك.
00:04:52إنه لا يجلس بجانبها.
00:04:53بل يجلس فوقها مباشرة.
00:04:55نموذج "قاعدة البيانات أولاً" هذا هو الجوهر، أليس كذلك؟
00:04:58إذن ماذا يعني هذا بالنسبة لنا حقاً؟
00:04:59حسناً، هذا يعني بضعة أشياء.
00:05:01يعني أنه لا يوجد انغلاق على مورد معين (No lock-in).
00:05:03قاعدة بيانات SQL الكاملة لا تزال موجودة وتعمل مع الأنظمة القديمة.
00:05:07لهذا السبب يستخدمه الناس لأشياء مثل خلفيات الـ SaaS، والأدوات الداخلية، وأنظمة إدارة المحتوى (Headless CMS)،
00:05:13ووكلاء الذكاء الاصطناعي مع بيانات محكومة.
00:05:15أنت تحاول تحديث نظام قديم دون إعادة كتابة كل شيء.
00:05:19قاعدة بياناتك هي المحرك الفعلي هنا.
00:05:21Directus يمنحها فقط لوحة تحكم وأدوات تحكم.
00:05:24الآن، للوهلة الأولى، إذا كنت قد جربت أدوات أخرى مثل Strapi أو Payload أو Hasura،
00:05:28سيبدو Directus مشابهاً لها، لكنها في الواقع تحل مشاكل مختلفة.
00:05:33Strapi و Payload يعتمدان على "الكود أولاً".
00:05:36تقوم بتعريف المخططات في الكود، ثم تعيد بناء هيكلك هناك.
00:05:40نعم، هذا يعمل، ولكنه عمل إضافي.
00:05:42Directus يغير بضعة أشياء ببعض التعديلات.
00:05:45مخططك موجود بالفعل، لذا بدلاً من إعادة إنشائه، تقوم فقط بتوصيله.
00:05:50سير عمل مختلف تماماً هنا.
00:05:52Hasura رائع لخدمات GraphQL السريعة، لكن Directus يذهب إلى أبعد من ذلك بكثير.
00:05:58أنت تحصل على واجهات برمجة تطبيقات (APIs).
00:05:59نعم، نحن نحصل على ذلك، لكننا نحصل أيضاً على مساحة عمل للإدارة، وصلاحيات، وملفات، وأتمتة.
00:06:05وهنا الجزء الذي يهتم به معظم المطورين بعد تجربته، الصلاحيات.
00:06:10أنا لا أتحدث فقط عن مجرد قواعد هنا.
00:06:12نحن نتحدث عن تحكم حقيقي بدون إضافات خارجية.
00:06:15لذا إذا كانت مشكلتك هي "أحتاج إلى خلفية برمجية"، فلديك خيارات.
00:06:18أما إذا كانت مشكلتك هي "لا أريد إعادة بناء خلفيتي البرمجية مرة أخرى"، فهذا شيء مختلف.
00:06:23الآن، من الواضح أنه لا توجد أداة مثالية، ولكن هذه الأداة رائعة جداً.
00:06:26ما الذي وجدته رائعاً حقاً؟
00:06:28حسناً، الصلاحيات تعمل ببساطة.
00:06:29هذا مذهل.
00:06:30التدفقات (Flows) تزيل الكثير من العمل الروتيني الذي نقوم به.
00:06:32واجهة المستخدم كانت نظيفة وسريعة جداً، ومن السهل نشرها باستخدام Docker.
00:06:37علاوة على كل ذلك، فإنه يتوسع بشكل جيد للغاية.
00:06:39ولكن مع كل هذه الأشياء الجيدة، بالطبع، هناك دائماً هذه العيوب.
00:06:43لذا ستكون المقايضات في أشياء مثل التدفقات المتقدمة التي قد تستغرق وقتاً، أليس كذلك؟
00:06:46إذا كنت قد جربت N8N أو أي شيء آخر، فستفهم ذلك.
00:06:49الوثائق ليست متوفرة دائماً.
00:06:51وإذا قمت بالاستضافة الذاتية، فستحتاج إلى إدارة البنية التحتية بنفسك.
00:06:54بالإضافة إلى أن الإعدادات المعقدة يمكن أن تصبح فوضوية محلياً.
00:06:57Directus يزيل فقط نوعاً معيناً جداً من العمل المتكرر في الخلفية البرمجية.
00:07:00إذن هل يستحق Directus التجربة؟
00:07:02بالنسبة للكثيرين منا، على الأرجح نعم.
00:07:03يعتمد ذلك على ما نقوم به، خاصة إذا كان لديك بالفعل بيانات SQL، أو إذا كنت
00:07:07متعباً من إعادة بناء هذه الخلفيات الأساسية التي نقوم بها طوال الوقت مراراً وتكراراً، إذن نعم،
00:07:11هذا يمثل قيمة حقيقية.
00:07:13إنه يوفر الوقت، ويقلل من الصيانة، وتحتفظ بالتحكم في البيانات.
00:07:17مرة أخرى، إنه مفتوح المصدر.
00:07:19ونحن نتحكم في ذلك.
00:07:20متى لا تستخدم هذا؟
00:07:22حسناً، إذا كنت تعمل في مشروع TypeScript صارم، مثل Monorepo ضخم، فربما لا، أليس كذلك؟
00:07:26إذا لم يكن لديك قاعدة بيانات موجودة، فربما لا.
00:07:29وإذا كنت تريد تعريف كل شيء في الكود منذ البداية، فإن شيئاً مثل Payload
00:07:33سيكون منطقياً أكثر هنا.
00:07:34لكن إذا كنت تفكر الآن، "لحظة، هل يمكن لهذا أن يجلس فوق قاعدة بياناتي فقط؟"
00:07:38نعم، يمكنه ذلك.
00:07:39لذا قد يكون جديراً بالتجربة.
00:07:41إذا كنت تستمتع بالأدوات مفتوحة المصدر ونصائح البرمجة كهذه، تأكد من الاشتراك في
00:07:45قناة Better Stack.
00:07:46سنراكم في فيديو آخر.

Key Takeaway

يقضي Directus على تكرار بناء الخلفيات البرمجية من خلال العمل كطبقة إدارة فورية فوق قواعد بيانات SQL، مما يوفر واجهات برمجة تطبيقات وأتمتة وصلاحيات دون الحاجة لكتابة كود مخصص.

Highlights

تتصل أداة Directus مباشرة بقواعد بيانات SQL الحالية مثل Postgres و MySQL و Oracle دون الحاجة لعمليات ترحيل البيانات أو إعادة بناء المخطط.

توفر المنصة واجهات برمجة تطبيقات REST و GraphQL فورية مع صلاحيات دقيقة على مستوى الحقول واشتراكات بيانات حية بمجرد التوصيل.

يسمح نظام التدفقات (Flows) ببناء أتمتة معقدة مثل إرسال إشعارات بريد إلكتروني تلقائية عند إنشاء عناصر جديدة في قاعدة البيانات.

تعتمد الأداة نموذج "قاعدة البيانات أولاً" مما يمنع الانغلاق على مورد معين ويسمح للأنظمة القديمة بالعمل جنباً إلى جنب مع الواجهة الجديدة.

يمكن إنشاء تطبيق كامل لإدارة الطلبات مع واجهة إدارة وصلاحيات وأتمتة في غضون دقائق قليلة ومن نقطة الصفر.

تتميز الأداة بكونها مفتوحة المصدر وسهلة النشر باستخدام Docker، مما يوفر تحكماً كاملاً في البنية التحتية والبيانات.

Timeline

حل مشكلة التكرار في تطوير الخلفية البرمجية

  • يستهلك بناء عمليات CRUD والمصادقة ولوحات التحكم وقتاً طويلاً بسبب التكرار الممل.
  • يعمل Directus كطبقة فورية فوق قاعدة البيانات الحالية لتقديم خدمات الخلفية كاملة.
  • تظل قاعدة البيانات الأصلية هي المصدر الوحيد للحقيقة دون الحاجة لنسخ البيانات أو تغيير هيكلها.

يعاني المطورون من إعادة بناء نفس الوظائف الأساسية في كل مشروع جديد. تقدم هذه الأداة حلاً يتصل مباشرة بقواعد البيانات الشهيرة مثل MySQL و Oracle. توفر المنصة وصولاً فورياً لتقنيات REST و GraphQL مع ميزات إضافية مثل معالجة الملفات وسير العمل المؤتمت.

بناء تطبيق إدارة طلبات في دقائق

  • تتيح واجهة المستخدم الرسومية إنشاء مجموعات بيانات وحقول مخصصة دون كتابة سطر SQL واحد.
  • تتم عملية حفظ المخطط (Schema) وتحديث قاعدة البيانات فوراً داخل المنصة.
  • يمكن إضافة أنواع مختلفة من الحقول مثل القوائم المنسدلة والمبالغ المالية وحالات الطلب بسهولة.

تبدأ التجربة بصفحة بيضاء لإنشاء مجموعة تسمى "الطلبات". يتم تعريف الحقول مثل اسم العميل والبريد الإلكتروني والمنتج يدوياً وبسرعة. يلغي هذا الأسلوب الحاجة للتنقل بين التبويبات لكتابة ملفات المخطط أو إجراء عمليات ترحيل يدوية للبيانات.

إدارة الصلاحيات وأتمتة سير العمل

  • يوفر دور "العام" (Public Role) تحكماً دقيقاً في صلاحيات القراءة والإنشاء والتحديث والحذف لكل مجموعة.
  • يربط نظام التدفقات (Flows) بين أحداث قاعدة البيانات وأفعال خارجية مثل إرسال البريد الإلكتروني.
  • تعمل الأتمتة دون الحاجة لمنطق خلفي (Backend logic) معقد أو ربط يدوي للأكواد.

يتم ضبط الأمان عبر تحديد صلاحيات الوصول للمجموعات، مثل جعل الطلبات للقراءة فقط للجمهور العام. تم اختبار ميزة الأتمتة باستخدام أداة Mailpit لإرسال بريد إلكتروني تلقائي بمجرد إضافة طلب جديد. تجمع هذه الميزة بين قوة قواعد البيانات ومرونة أدوات مثل Zapier في واجهة واحدة مدمجة.

نموذج قاعدة البيانات أولاً مقابل الكود أولاً

  • يختلف Directus عن أدوات مثل Strapi و Payload التي تتطلب تعريف المخططات في الكود أولاً.
  • تسمح المنصة بتحديث الأنظمة القديمة دون الحاجة لإعادة كتابة التطبيق بالكامل.
  • تتفوق المنصة على Hasura بتقديم مساحة عمل شاملة للإدارة وصلاحيات مدمجة وتدفقات عمل.

يعمل Directus مباشرة فوق محرك قاعدة البيانات، مما يجعله مثالياً لخلفيات SaaS والأدوات الداخلية وأنظمة CMS. لا يفرض النظام قيوداً على المطورين (No lock-in) لأن قاعدة البيانات تظل مستقلة وقابلة للاستخدام مع أنظمة أخرى. يركز هذا النهج على استغلال المخطط الموجود مسبقاً بدلاً من محاولة إعادة إنتاجه برمجياً.

المزايا والعيوب وحالات الاستخدام المثالية

  • تعد سهولة النشر عبر Docker ونظافة واجهة المستخدم من أبرز نقاط القوة.
  • تتطلب الاستضافة الذاتية إدارة البنية التحتية يدوياً وقد تكون الوثائق غير مكتملة أحياناً.
  • يفضل استخدام أدوات أخرى في المشاريع التي تتطلب تعريفاً صارماً لكل شيء داخل الكود منذ البداية.

تثبت الأداة قيمتها عند الرغبة في تقليل وقت الصيانة والاحتفاظ بالتحكم الكامل في البيانات. تعد الصلاحيات والتدفقات المدمجة من أكثر الميزات التي توفر الجهد على المطورين. ومع ذلك، قد تصبح الإعدادات المعقدة فوضوية في البيئات المحلية، كما أن المشاريع التي تعتمد كلياً على TypeScript و Monorepo قد تجد خيارات أخرى أكثر ملاءمة.

Community Posts

View all posts