أنواع أطر العمل وكيف تختار
درس 2 من 6
2أنواع أطر العمل وكيف تختار
الصورة الكبيرةستسمع عشرات الأسماء: React وVue وAngular وDjango وLaravel وSpring وNext.js... وتبدو كأنها قائمة لا تنتهي. لكنها كلها تقع في ثلاث خانات حسب أين تعمل: في المتصفح عند المستخدم، أو على الخادم، أو في الاثنين معًا. حين تعرف الخانة، تعرف ماذا يفعل الإطار قبل أن تقرأ عنه سطرًا.
ماذا تشاهد في الرسم: ثلاث خانات حسب مكان التشغيل، ثم أسئلة بسيطة تختار بها من كل خانة، ثم الأطر الأربعة التي ستبنيها في هذا القسم.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
فكّر في مطعم. الصالة هي ما يراه الزبون: الطاولات والقائمة والنادل، وهذه هي الواجهة، وأطرها مثل React تصمّم الصالة وتجعلها تستجيب. المطبخ مخفي عن الزبون: يستقبل الطلبات ويطبخ ويخزّن، وهذا هو الخادم، وأطره مثل Express وFastAPI تنظّم المطبخ. وهناك شركات تبيعك مطعمًا كاملًا جاهزًا بصالته ومطبخه معًا، وهذا هو الإطار المتكامل مثل Next.js. وبعض المطابخ تأتي فارغة تضع فيها ما تريد (إطار صغير مرن)، وبعضها مجهّز بكل الأدوات من أول يوم (إطار «جاهز بكل شيء»).
التصنيف الأساسي حسب بيئة التشغيل: أطر العميل (client-side) تعمل في المتصفح وتدير الحالة ورسم DOM (React، Vue، Angular، Svelte). أطر الخادم تدير دورة طلب/رد HTTP والتوجيه والوسائط والوصول للبيانات (Express، Fastify، NestJS في Node؛ FastAPI، Flask، Django في بايثون؛ Spring Boot، ASP.NET Core، Laravel، Rails). الأطر المتكاملة أو «الميتا-أطر» تبني فوق إطار واجهة وتضيف الخادم: التصيير على الخادم (SSR)، التوليد الثابت، التوجيه بالملفات، ومسارات API (Next.js فوق React، Nuxt فوق Vue، SvelteKit). المحور الثاني فلسفي: الأطر الدنيا (micro) تعطيك النواة وتترك الاختيارات لك، والأطر «المضمّنة البطاريات» تأتي بـ ORM ومصادقة ولوحة إدارة واصطلاحات صارمة (Django، Rails، Laravel، NestJS، Angular).
قبل أن تبدأ
🧰ما هو إطار العمل
من الجزء السابق: الإطار ينادي كودك.
🌍العميل والخادم
تعرف أن المتصفح يطلب والخادم يرد.
الفكرة الجوهرية
1ثلاث خانات حسب مكان العمل
أول سؤال عن أي إطار: أين يعمل؟ الجواب يضعه في واحدة من ثلاث خانات:
| الخانة | أين يعمل | ماذا يفعل | أمثلة |
|---|---|---|---|
| أطر الواجهة (Frontend) | في متصفح المستخدم | يرسم الصفحة ويحدّثها حين يضغط المستخدم أو تتغيّر البيانات | React، Vue، Angular، Svelte |
| أطر الخادم (Backend) | على الخادم | يستقبل الطلبات، يتحقّق، يكلّم قاعدة البيانات، ويرد | Express، FastAPI، Django، Flask، Spring، Laravel |
| أطر متكاملة (Full-stack) | في الاثنين | يبني الصفحة على الخادم ثم يكمل التفاعل في المتصفح، في مشروع واحد | Next.js، Nuxt، SvelteKit |
معظم التطبيقات الحقيقية تستخدم خانتين: إطار واجهة يكلّم إطار خادم عبر واجهة REST، مثل React مع FastAPI. والإطار المتكامل يجمعهما في مشروع واحد حين يناسب ذلك.
2عائلات أخرى ستسمع عنها
كلمة «إطار» تُستخدم خارج الويب أيضًا. لن تحتاجها الآن، لكن حين تسمعها تعرف خانتها: أطر الجوال مثل React Native وFlutter تبني تطبيقًا لأندرويد وآيفون من كود واحد. أطر الاختبار مثل pytest وJest تشغّل اختباراتك، وستقابل pytest في قسم الجودة. أطر التنسيق مثل Tailwind وBootstrap تعطيك CSS جاهزًا. وأطر الذكاء الاصطناعي مثل PyTorch تبني النماذج وتدرّبها.
3صغير مرن أم «جاهز بكل شيء»؟
داخل كل خانة يوجد نوعان. الإطار الصغير المرن يعطيك الأساس فقط (المسارات والطلب والرد) وأنت تختار الباقي: Express وFlask وFastAPI. سهل البداية وواضح، لكنك تقرّر وتركّب أشياء كثيرة بنفسك. الإطار الجاهز بكل شيء (batteries included) يأتي بقاعدة البيانات والمصادقة ولوحة الإدارة وطريقة واحدة لكل شيء: Django وRails وLaravel وNestJS وAngular. أبطأ في التعلّم، لكنه يسرّع المشاريع الكبيرة ويوحّد الفريق.
4نفس الفكرة بلغات مختلفة
إليك نفس المسار، «أعطني قائمة المقهى»، في ثلاثة أطر خادم. لا تحاول حفظها الآن، فقط لاحظ أن الشكل واحد: فعل ومسار ودالة ترد. هذا ما بنيته في الجزء السابق بإطارك الصغير.
// Express (JavaScript)
app.get("/menu", (req, res) => {
res.json(["latte", "mocha", "v60"]);
});# FastAPI (Python)
@app.get("/menu")
def menu():
return ["latte", "mocha", "v60"]# Flask (Python), which you met in the REST lesson
@app.route("/menu")
def menu():
return ["latte", "mocha", "v60"]الفرق الأكبر بينها هو اللغة، لا الفكرة. لذلك نصف قرار الاختيار يحسمه سؤال بسيط: ما اللغة التي تعرفها أنت أو فريقك؟
5خمسة أسئلة تختار بها
حين تقف أمام اختيار إطار، اسأل بالترتيب: (1) ما اللغة التي أعرفها أو يعرفها فريقي؟ (2) ماذا أبني: واجهة برمجية فقط، أم واجهة تفاعلية، أم صفحات يجب أن يجدها Google؟ (3) هل التوثيق والمجتمع كبيران بما يكفي لأجد جوابًا حين أعلق؟ (4) ماذا تطلب الوظائف في سوقي؟ (5) هل الإطار حيّ ويُحدَّث باستمرار؟ هذه دالة صغيرة تطبّق أول سؤالين، شغّلها وغيّر الاحتياجات:
def suggest(language, api=False, interactive=False, seo_pages=False):
picks = []
if api:
picks.append("FastAPI" if language == "python" else "Express")
if seo_pages:
picks.append("Next.js (React with a server)")
elif interactive:
picks.append("React")
return picks or ["no framework: a script or plain HTML is enough"]
print("cafe app, python team:", suggest("python", api=True, interactive=True))
print("menu page google must find:", suggest("javascript", seo_pages=True))
print("mobile app backend, js team:", suggest("javascript", api=True))
print("rename files in a folder:", suggest("python"))6لماذا هذه الأربعة في درب؟
بعد هذين الجزأين يدخل القسم الأطر بهذا الترتيب، وكل واحد له سبب: Express أولًا لأنه أبسط إطار خادم وبلغة JavaScript التي تعلّمتها في الواجهات، ويثبّت لك Node الذي تحتاجه لاحقًا لـ React. ثم FastAPI بلغتك الأولى بايثون، على نفس واجهة الطلبات لتقارن بينهما. ثم React أشهر أداة واجهات في سوق العمل، يؤتمت render() الذي كتبته بيدك. وأخيرًا Next.js يجمع الواجهة والخادم في مشروع واحد. بهذا تكون قد لمست الخانات الثلاث كلها.
مثال محلول
ثلاثة مشاريع، ثلاثة اختيارات. طبّق الأسئلة الخمسة على كل مشروع قبل أن تقرأ الجواب:
| المشروع | ما يحتاجه | اختيار معقول |
|---|---|---|
| تطبيق طلبات لمقهى، والفريق يكتب بايثون | واجهة برمجية وشاشة تفاعلية | FastAPI للخادم وReact للواجهة |
| موقع قائمة طعام يجب أن يظهر في Google | صفحات يبنيها الخادم وتفاعل بسيط | Next.js وحده |
| خادم لتطبيق جوال، والفريق يكتب JavaScript | واجهة برمجية فقط، بلا صفحات | Express |
| سكربت يرتّب صور المقهى في مجلدات | لا طلبات ولا واجهة | بلا إطار: بايثون وحدها |
لا يوجد جواب واحد صحيح. فريق JavaScript قد يختار Express مع React للمقهى، وهذا جيد أيضًا. المهم أن تختار لسبب تستطيع أن تقوله بصوت عالٍ.
خرافة مقابل حقيقة
| الخرافة | الحقيقة |
|---|---|
| يجب أن تتعلّم كل الأطر لتجد عملًا. | الشركات تطلب إطارًا أو اثنين بعمق. إطار خادم وإطار واجهة تعرفهما جيدًا أقوى من عشرة تعرف أسماءها. |
| React وVue وAngular أشياء مختلفة تمامًا. | كلها في نفس الخانة وتحلّ نفس المشكلة: رسم الواجهة من الحالة. من يتقن واحدًا ينتقل للآخر في أسابيع. |
| الإطار المتكامل مثل Next.js يغني عن فهم الخادم. | هو يخفي الحدود فقط. حين يحدث خطأ ستحتاج أن تعرف هل هو في المتصفح أم على الخادم، ولهذا تتعلّم Express وFastAPI قبله. |
اختبر فهمك
إطار يعمل في متصفح المستخدم ويحدّث الصفحة عند الضغط. ما خانته؟
مكان العمل هو المتصفح ووظيفته رسم الواجهة، فهو إطار واجهة مثل React.
ما الذي يميّز Next.js عن React؟
Next.js إطار متكامل مبني فوق React: يبني الصفحات على الخادم ويضيف التوجيه ومسارات API.
فريقك يكتب بايثون ويحتاج واجهة برمجية فقط. ما أقرب اختيار؟
اللغة بايثون والمطلوب خادم فقط، وFastAPI إطار خادم بايثوني.
بطاقات مراجعة سريعة
تحقق من فهمك
ما أول سؤال تسأله لتعرف نوع أي إطار؟
أين يعمل: في المتصفح، أم على الخادم، أم في الاثنين؟
لماذا يُنصح المبتدئ بإطار صغير أولًا؟
لأنه يرى كل قطعة ويفهم دورها، ثم يفهم الإطار الكبير كقطع مركّبة مسبقًا.
صديقك محتار بين Vue وReact لمشروعه الأول. بماذا تنصحه؟
كلاهما في نفس الخانة ويحلّان نفس المشكلة. يختار ما توثيقه أوضح له أو ما تطلبه الوظائف في سوقه، ويتعلّمه بعمق بدل التنقّل.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.