تطوير التطبيقات

ما هو الباك إند في التطبيق

الباك إند في التطبيق هو الجزء الذي لا يعيش على هاتف المستخدم: واجهة برمجة تستقبل الطلبات، وقاعدة بيانات تبقى فيها البيانات، وخدمة دخول تقرر من يُسمح له برؤية ماذا. والتطبيق على الهاتف ليس صاحب القرار، بل يعرض ما سمح به الباك إند فقط، ولهذا لا يستطيع تطبيق سليم تماماً فعل أي شيء حين يتوقف الخادم عن الرد.

  • الدرس 6 من 8
  • مبتدئ
  • مجاني، دون تسجيل

وجهان وباك إند واحد

التطبيق على الهاتف

النصف الظاهر من المنتج، والنصف الذي يحكم به المستخدم

  • يبني الشاشة ويأخذ مدخلات المستخدم
  • يرسل الطلب ويعرض الجواب
  • كل ما بداخله قابل للقراءة
منتج واحد بوجهين مختلفين

الموقع أو لوحة الإدارة

البيانات نفسها من باب آخر ولشخص آخر عادةً

  • يرى الطلبات ويغيّر حالتها
  • صلاحيته أوسع فقواعده منفصلة أيضاً

كلاهما يتحدث إلى باك إند واحد ولا يقرر أي منهما شيئاً بنفسه

الباك إند

حيث يُتخذ القرار وتبقى البيانات فعلاً

  • واجهة البرمجة: الباب الوحيد المفتوح من الخارج
  • قاعدة البيانات: الطلبات والمستخدمون والرسائل
  • خدمة الدخول: لأي مستخدم يعود كل طلب
  • تخزين الملفات: الصور والمرفقات بعناوين في القاعدة

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

آخر مراجعة: تُراجع الحقائق وأسماء الأدوات في هذا الدرس مقابل مصادرها في هذا التاريخ.

ما هو الباك إند ولماذا نصف التطبيق هناك؟

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

ومثال واحد أوضح من أي تعريف: قائمة طلبات متجر. فإن حُفظت هذه القائمة على الهاتف اختفت عند تغيير الهاتف، ولم تظهر على لوح المستخدم نفسه، ومن يفتح ملفات التطبيق يستطيع تغيير الأرقام. وهذه الجمل الثلاث هي كل سبب وجود الباك إند.

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

فالتقسيم الصادق هو هذا: التطبيق يعرض والباك إند يقرر. وإن كنت قرأت كيف يعمل التطبيق فهذه الحدود نفسها منظوراً إليها من جهة الخادم هذه المرة.

ما هو الباك إند في التطبيق وما الفرق بينه وبين التطبيق

ماذا يوجد داخل الباك إند؟

الباك إند ليس برنامجاً واحداً بل عدة قطع، كل واحدة تؤدي عملاً واحداً، وتجلس عادةً معاً على خادم واحد.

القطعة الأولى هي واجهة البرمجة، الباب الذي يعبر منه التطبيق. فالتطبيق ينادي عنواناً ويرسل بيانات ويأخذ جواباً هو JSON غالباً. وما يطلبه كل عنوان وما يعيده هو العقد بين التطبيق والخادم، وما هي واجهة البرمجة يفتح هذا العقد كاملاً.

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

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

والقطعة الرابعة، التي يُفكَّر فيها متأخراً دائماً، هي تخزين الملفات. فصور الملف الشخصي والمرفقات لا تجلس عادةً داخل قاعدة البيانات؛ لها مكانها الخاص ويُحفظ عنوانها فقط في القاعدة. وكون هذا العنوان عاماً أو موقّعاً ومؤقتاً قرار أمني بذاته.

وكل هذا يعمل على الشيء الموصوف من تحت في كيف يعمل الإنترنت: آلة لا تُطفأ وتنتظر على عنوان.

حين يقال إن الخادم متوقف، ماذا حدث بالضبط؟

«الخادم متوقف» لا تعني تقريباً أبداً أن الحاسوب أُطفئ. فثلاث حالات مختلفة تماماً تجتمع تحت هذه الجملة الواحدة، ولكل واحدة علاج آخر.

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

والثانية: الخادم رد وكان رده خطأ. ورمز الحالة مهم هنا وله عائلتان. فالخمسمئة تعني أن المشكلة من جهة الخادم، والأربعمئة تعني أن الطلب نفسه كان معطوباً. والتطبيق الذي يعرض الاثنين على أنهما «الخادم متوقف» يرسل المستخدم في طريق لا نهاية له؛ فالـ401 تعني سجّل الدخول ثانيةً والـ500 تعني اجلس وانتظر.

والثالثة، وهي أشيع من الاثنتين: الخادم رد فعلاً لكن متأخراً جداً. فشيء في منتصف الطريق نفد صبره وقطع الاتصال والبرنامج ما زال يعمل. ومن جهة التطبيق لا يفترق هذا عن خادم مطفأ.

والثالثة هي حيث تضيع الفرق أكثر وقتها، لأن رقم الصبر مكتوب عادةً في مكان لا يبحث فيه أحد. فوثائق PHP نفسها، وهي تصف إعداد request_terminate_timeout، تقول إنه «مهلة خدمة طلب واحد يُقتل بعدها عملية العامل»، وتضيف صراحةً أن هذا الخيار يُستعمل حين لا يوقف max_execution_time تنفيذ السكربت. أي أن رقمين يعيشان في ملفين منفصلين، والأصغر هو صاحب الكلمة الأخيرة.

والنتيجة العملية لمن يكتب تطبيقاً: أعطِ كل طلب ترسله مهلة معلنة، وصنّف ردود الخطأ برمز الحالة لا بنصها، واكتب سلوكاً مختلفاً لكل عائلة. يأخذ هذا عشر دقائق في الساعة الأولى من المشروع، وإن أُهمل عاد بعد أشهر على شكل بلاغات «التطبيق لا يعمل» لا يمكن إعادة إنتاج أي منها.

طلب واحد وأربعة مواضع يمكن أن يموت فيها

يرى التطبيق هذه كلها سواءً ما لم تجبره على التفريق بينها.

  1. 1

    شبكة المستخدم

    الطلب لم يغادر الهاتف أصلاً. والخادم لا يدري.

  2. 2

    ترجمة اسم النطاق

    الاسم لم يتحول إلى عنوان. فالموقع عامل لبعضهم دون بعض.

  3. 3

    خطأ من جهة الخادم

    جاء جواب برمز من الخمسمئة. وعلى التطبيق أن يقول أعد المحاولة لاحقاً.

  4. 4

    انتهت المهلة

    كان البرنامج ما زال يعمل ورقم في ملف إعدادات أنهاه قبله.

هذا الترتيب ليس ثابتاً: قد يمر الطلب بمحطات عدة سليماً ويسقط في الأخيرة.

نشتري باك إند جاهزاً أم نكتب واحداً بأنفسنا؟

وهناك طريق ثالث ينتهي إليه معظم الفرق الصغيرة: الباك إند كخدمة، أي خدمة تسلّمك قاعدة البيانات والدخول وتخزين الملفات جاهزة فلا ترفع خادماً أصلاً. وفايربيس من غوغل وسوبابيس مثالان معروفان.

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

وما تعطيه في المقابل في الصفحات نفسها ويُقرأ أقل. فحين يزول الخادم الوسيط يتحدث التطبيق مباشرةً إلى قاعدة البيانات، ولا يقف بين بياناتك ومستخدم خبيث إلا ملف القواعد ذاك. ووثائق فايربيس تقولها بهذه النبرة بالضبط: قواعد الأمان تُعرَّف خارج تطبيقك، فالعملاء ليسوا مسؤولين عن فرض الأمان. وهي جملة مطمئنة حتى تتذكر ما يتبعها، وهو أن أي خطأ في ذلك الملف خطأ لن يمسكه أي كود آخر.

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

وسؤال القفل يُسمع منهم أفضل مما يُسمع منا. فسوبابيس يكتب في صفحة معماريته أنه لا يجرّد قاعدة بيانات بوستجرس وأنك تصل إليها بصلاحيات كاملة، ويكتب في مبادئه أنه لتفادي القفل يبقي الانتقال إلى الداخل والخارج سهلاً، ولهذا يستعمل معايير قائمة مثل pg_dump وملفات CSV. وهذا ادعاء صانع عن منتجه هو لا قياس منا؛ فنحن لم ننفّذ هجرة حقيقية من أي منهما ولا نستطيع أن نقول كم تستغرق عملياً.

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

الباك إند الجاهز مقابل باك إند تكتبه

الخدمة المدارة

  • الدخول والقاعدة وتخزين الملفات تعمل من اليوم الأول
  • لا تكتب كود مصادقة أو تخويل من جهة الخادم
  • كل أمن البيانات يجتمع في ملف قواعد واحد
  • التطبيق يتحدث مباشرةً إلى قاعدة البيانات

باك إند تكتبه

  • كل قرار مالي يعمل على خادم بيدك أنت
  • واجهة البرمجة عقدك أنت وأنت من يحدد شكلها
  • الأسابيع الأولى تذهب للبنية التحتية بدل الشاشات
  • وحين يسقط الخادم ليلاً على أحد أن يستيقظ

ولا عمود من هذين يفوز؛ فالصحيح يعتمد على مقدار المنطق المالي في المنتج ومن يتولى المناوبة.

اسأل نفسك هذه قبل أن تختار

قرار الباك إند لا يكون تقنياً خالصاً تقريباً أبداً. أجب عن الأسئلة الأربعة أدناه بجدية والجواب يُظهر نفسه.

الأول: إن أرسل أحدهم غداً طلباً لا يرسله تطبيقك أبداً، فماذا يحدث؟ إن كان جوابك «تطبيقنا لا يفعل هذا» فأنت لم تفكر في الباك إند بعد. فمن يعمل ضد تطبيقك ليس مضطراً لاستعمال تطبيقك.

والثاني: أي الأرقام يجب ألا يحددها المستخدم؟ السعر والمخزون والنقاط والدور. وكل واحد من هذه يصل من جهة التطبيق هو عملياً إدخال مستخدم.

والثالث: إن تركت هذه الخدمة غداً فماذا يأتي معك؟ ليس اتهاماً للبائع بل تمريناً. والجواب يبيّن عادةً كم من منتجك ملكك فعلاً.

والرابع: من يعيد الخادم في الثالثة فجراً؟ إن كان الجواب لا أحد، فالخدمة المدارة أغلى وتُحسب الخيار الرخيص.

ونصيحة لا علاقة لها بالأربعة: قبل كتابة أول سطر من الباك إند، ارسم شكل البيانات على ورق. الجداول أو المجموعات وحقولها ولمن يعود كل سطر. فتغيير شكل البيانات بعد أن يصير لألف مستخدم بيانات فيها أغلى من أي شيء آخر في المشروع. وإن لم يكن لديك فريق وصار القرار أكبر منك، فـصفحة تطبيقات RGB تقول كيف نمضي بهذه المرحلة بالذات.

ورقة قرار الباك إندقبل أول سطر كود

ليكن هذا على ورق

  • قائمة الجداول أو المجموعات مع حقولها
  • لأي مستخدم يعود كل سطر
  • الأرقام التي يُسمح للخادم وحده بتحديدها
  • سلوك التطبيق لكل عائلة خطأ على حدة

هذه علامات أنك لست جاهزاً بعد

  • كلمة سر القاعدة مكتوبة في مكان ما داخل التطبيق
  • التطبيق يحسب المبلغ النهائي ويرسله
  • لا طلب له مهلة معلنة
  • لا أحد يعرف ماذا يبقى إن تركتم الخدمة

المسار السريع مع الذكاء الاصطناعي

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

  1. اكتب ما ينبغي أن يفعله المنتج بلغة بسيطة بلا مصطلحات تقنية. من يدخل وماذا يرى وماذا ينشئ وماذا يغيّر.
  2. شغّل الوصفة أدناه بنموذج قوي لا بنموذج رخيص. فهذه تمريرة حكم لا عمل ميكانيكي؛ واختيارنا الحالي مذكور في قسم الذكاء الاصطناعي في الموقع.
  3. اقرأ جدول الصلاحيات سطراً سطراً. فهو الموضع الوحيد الذي يستطيع فيه غير المبرمج أيضاً أن يرى الخطأ، لأنه جمل لا نحو لغة قواعد.
  4. احذف كل سطر لا تستطيع أن تشرح الحاجة إليه في جملة واحدة ثم اسأل ثانيةً. فالنماذج تميل إلى بناء الجدول أكمل من حاجتك.

وصفة جاهزة للنسخ

أنا أصمم الباك إند لهذا المنتج:
{وصف بسيط للمنتج بلغة عادية}

لا تكتب أي كود. أعطني ثلاثة أشياء لا أكثر:

1) شكل البيانات: قائمة الجداول أو المجموعات، وحقول كل واحد مع أنواعها، ولأي مستخدم يعود كل سطر. وضع علامة «للخادم فقط» على كل حقل لا يُسمح إلا للخادم بكتابته.

2) جدول الصلاحيات: لكل جدول ولكل دور مستخدم، أربعة أعمدة للقراءة والإنشاء والتعديل والحذف. املأ كل خانة بجملة كاملة مثل «السطور التي يساوي فيها معرّف المستخدم مالك السطر فقط». ولا تكتب نحو قواعد ولا كوداً.

3) قائمة بما لا يجوز للعميل أن يحدده أبداً، مع سبب من سطر واحد لكل بند.

قواعد صارمة:
- لا تكتب أي اسم خدمة ولا اسم مكتبة ولا رقم نسخة ولا سعراً.
- لا تضف أي حقل غير وارد في الوصف أعلاه؛ وحيث ترى فجوة فلا تملأها بل اكتبها في قائمة منفصلة اسمها «أسئلة ينبغي أن أسألها».
- وحيث لا تعرف قل لا أعرف. ولا تخمّن.

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

الذكاء الاصطناعي في هذا العمل

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

أدوات تساعد فعلا

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

اين ينقلب ضدك

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

المصادر: Firebase: get started with Cloud Firestore Security Rules Firebase Security Rules: how they work and where they are defined Anthropic: supported countries Google: where Gemini Apps are available

حدود هذه النصيحة

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

من عملنا نحن

الحالة الثالثة في هذا الدرس، أي «رد الخادم لكن متأخراً جداً»، يمكن عرضها على الخادم نفسه الذي سلّمك هذه الصفحة. فتحنا ملفي الإعدادات اليوم. في /www/server/php/85/etc/php.ini يقول السطر 404 max_execution_time = 900، وفي /www/server/php/85/etc/php-fpm.conf يقول السطر 40 request_terminate_timeout = 180. أي على موقع تقول إعدادات PHP فيه خمس عشرة دقيقة، الذي ينهي الطلب فعلاً ثلاث دقائق، وذلك الرقم يعيش في ملف آخر لا يفتحه أحد عادةً. ولتطبيق يتحدث إلى خادم كهذا يعني هذا أن عملية ثقيلة قد تنتهي في الدقيقة الثالثة دون أي رسالة من البرنامج، ولا يرى المستخدم إلا «الخادم متوقف». وهذا التعارض وحده أول موضع ننظر فيه حين نفحص بطء واجهة برمجة.

اسئلة متابعة حقيقية

هل يمكن تطبيق بلا باك إند أصلاً؟

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

هل يمكن للتطبيق أن يستعمل باك إند الموقع نفسه؟

غالباً نعم وهو الاختيار الصحيح عادةً، لكن ليس عبر الأبواب نفسها التي يستعملها الموقع. فالموقع يعمل بالكوكيز والنماذج، والتطبيق يحتاج واجهة تعمل بتوكن وترد بـJSON. أي القاعدة نفسها والمنطق نفسه مع طبقة دخول جديدة.

أنبني التطبيق أولاً أم الباك إند؟

ولا واحد منهما. اكتب العقد بينهما أولاً، أي قائمة العناوين بمدخلات ومخرجات كل واحد. وبعدها يستطيع شخصان العمل بالتوازي ولا تصير لحظة الوصل شجاراً؛ وبدونه يظل طرف ينتظر الآخر دائماً.