اذهب إلى المحتوى

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

  • المتطلبات الأساسية: المهارات الحاسوبية الأساسية، والفهم الأساسي لكيفية معالجة الشيفرة البرمجية من طرف الخادم لطلبات HTTP والاستجابة لها (اطّلع على تفاعلات الخادم مع العميل في موقع ويب ديناميكي).
  • الهدف: فهم كيف يمكن لأطر عمل الويب تبسيط تطوير أو صيانة الشيفرة البرمجية من طرف الخادم وجعل القارئ يفكر في اختيار إطار عمل لعملية التطوير الخاصة به.

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

مقدمة عامة

تُعَد أطر عمل الويب من طرف الخادم -المعروفة أيضًا باسم "أطر عمل تطبيقات الويب"- أطر عمل برمجية تسهّل كتابة تطبيقات الويب وصيانتها وتوسيعها، وتوفّر الأدوات والمكتبات التي تبسّط المهام الشائعة لتطوير الويب، مثل توجيه عناوين URL إلى المعالجات المناسبة والتفاعل مع قواعد البيانات ودعم الجلسات والتصريح للمستخدمين وتنسيق الخرج، مثل ملفات HTML و JSON و XML، وتحسين الأمان في مواجهة هجمات الويب.

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

فوائد أطر عمل الويب

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

العمل المباشر مع طلبات واستجابات HTTP

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

يوضح المثال الآتي كيفية عمل ذلك في إطار عمل جانغو Django باستخدام لغة بايثون Python، إذ تتلقى كل دالة عرض (أو معالج طلب) الكائن HttpRequest الذي يحتوي على معلومات الطلب، وتكون هذه الدالة مطلوبة لإعادة الكائن HttpResponse مع الخرج المُنسَّق (سلسلة نصية في هذه الحالة).

# دالة عرض جانغو
from django.http import HttpResponse

def index(request):
    # الحصول على كائن‫ HttpRequest (طلب)
    # إجراء العمليات باستخدام المعلومات الواردة في الطلب.
    # إعادة الكائن‫ HttpResponse
    return HttpResponse('Output string to return')

توجيه الطلبات إلى المعالج المناسب

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

تستخدم أطر العمل المختلفة آليات مختلفة للربط Mapping، فمثلًا يضيف إطار عمل الويب فلاسك Flask باستخدام لغة بايثون مسارات لعرض الدوال باستخدام مزخرِف Decorator.

@app.route("/")
def hello():
    return "Hello World!"

بينما يتوقع إطار عمل جانغو من المطورين تحديد قائمة بروابط عناوين URL بين نمط URL ودالة عرض.

urlpatterns = [
    url(r'^$', views.index),
    # مثال : /best/myteamname/5/
    url(r'^best/(?P<team_name>\w.+?)/(?P<team_number>[0-9]+)/$', views.best),
]

تسهيل الوصول إلى البيانات في الطلب

يمكن تشفير البيانات في طلب HTTP بعدة طرق، إذ يمكن أن يشفِّر طلب HTTP من النوع "GET" البيانات المطلوبة في معاملات عنوان URL أو ضمن بنية عنوان URL للحصول على ملفات أو بيانات من الخادم؛ بينما سيتضمن طلب HTTP من النوع "POST" معلومات التحديث بوصفها "بيانات POST" ضمن متن الطلب لتحديث موردٍ على الخادم. كما يمكن أن يتضمن طلب HTTP معلومات حول الجلسة أو المستخدم الحالي في ملف تعريف الارتباط Cookie من طرف العميل.

توفر أطر عمل الويب آليات مناسبة للغة البرمجة للوصول إلى هذه المعلومات، فمثلًا يحتوي كائن HttpRequest الذي يمرره إطار عمل جانغو إلى كل دالة عرض على توابع وخاصيات للوصول إلى عنوان URL الهدف ونوع الطلب، مثل طلب HTTP من النوع "GET"، ومعاملات "GET" أو "POST" وملف تعريف الارتباط وبيانات الجلسة وغير ذلك. كما يمكن لإطار عمل جانغو تمرير المعلومات المُشفَّرة في بنية عنوان URL من خلال تحديد "الأنماط الملتقَطة" في رابط Mapper عنوان URL (ألقِ نظرةً على الجزء الأخير من الشيفرة البرمجية في القسم السابق).

تجريد وتبسيط الوصول إلى قاعدة البيانات

تستخدم مواقع الويب قواعد البيانات لتخزين معلومات عن المستخدمين ومعلومات لمشاركتها معهم. توفّر أطر عمل الويب في أغلب الأحيان طبقة قاعدة بيانات تجرّد عمليات القراءة والكتابة والاستعلام والحذف لقاعدة البيانات، إذ يُشار إلى طبقة التجريد هذه باسم رابط الكائنات بالعلاقات Object-Relational Mapper -أو اختصارًا ORM.

توجد فائدتان لاستخدام رابط ORM، هما:

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

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

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

#best/models.py

from django.db import models

class Team(models.Model):
    team_name = models.CharField(max_length=40)

    TEAM_LEVELS = (
        ('U09', 'Under 09s'),
        ('U10', 'Under 10s'),
        ('U11', 'Under 11s'),
        # قائمة فرقنا الأخرى
    )
    team_level = models.CharField(max_length=3,choices=TEAM_LEVELS,default='U11')

يوفّر نموذج جانغو واجهة برمجة تطبيقات API بسيطة للاستعلام بهدف البحث في قاعدة البيانات، إذ يمكن أن تتطابق هذه الواجهة مع عدد من الحقول في وقت واحد باستخدام معايير مختلفة، مثل التطابق التام، وعدم الحساسية لحالة الأحرف، وأكبر من وإلخ، ويمكن أيضًا دعم العبارات المعقدة، فمثلًا يمكنك تحديد بحثٍ عن فِرق U11 التي اسمها يبدأ بالحرفين "Fr"، أو ينتهي بالحرفين "al".

يوضّح مقتطف الشيفرة البرمجية الثاني دالة عرض (معالج موارد) لعرض جميع فِرق U09، إذ نحدّد في هذه الحالة أننا نريد ترشيح جميع السجلات عندما يحتوي الحقل team_level على النص "U09" تمامًا. لاحظ فيما يلي كيفية تمرير هذه المعايير إلى الدالة filter()‎ بوصفها وسيطًا مع اسم الحقل ونوع التطابق ومفصولٌ بينها شرطة سفلية team_level__exact.

#best/views.py

from django.shortcuts import render
from .models import Team

def youngest(request):
    list_teams = Team.objects.filter(team_level__exact="U09")
    context = {'youngest_teams': list_teams}
    return render(request, 'best/index.html', context)

تصيير البيانات

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

توفر أطر عمل الويب آلية لتسهيل إنشاء تنسيقات أخرى من البيانات المخزنة بما في ذلك تنسيقات JSON و XML، فمثلًا يتيح لك نظام قوالب جانغو تحديد المتغيرات باستخدام صيغة "تعابير موضوعة بين قوسين معقوصين Double-handlebars"، مثل {{ variable_name }}، والتي ستُستبدَل بالقيم المُمرَّرة من دالة العرض عند عرض الصفحة. كما يوفّر نظام القوالب دعمًا للتعابير ذات الصيغة {% expression %} التي تسمح للقوالب بإجراء عمليات بسيطة، مثل تكرار قيم القائمة المُمرَّرة في القالب.

ملاحظة: تستخدم العديد من أنظمة إنشاء القوالب الأخرى البنية نفسها مثل Jinja2 بلغة بايثون و Handlebars بلغة جافا سكريبت و Moustache بلغة جافا سكريبت وغيرها.

يوضّح مقتطف الشيفرة البرمجية التالي كيف يعمل ذلك، فاستمرارًا لمثال "فريق الناشئين" من القسم السابق، يُمرَّر قالب HTML إلى متغير قائمة يسمى youngest_teams باستخدام العرض view. لدينا ضمن بنية ملف HTML تعبير يتحقق أولًا من وجود المتغير youngest_teams، ثم يكرّره في حلقة for. يعرض القالب في كل تكرار قيمة اسم الفريق team_name الخاص بالفريق في عنصر قائمة.

#best/templates/best/index.html

<!DOCTYPE html>
<html lang="en">
<body>

 {% if youngest_teams %}
    <ul>
    {% for team in youngest_teams %}
        <li>{{ team.team_name }}</li>
    {% endfor %}
    </ul>
{% else %}
    <p>No teams are available.</p>
{% endif %}

</body>
</html>

كيفية اختيار إطار عمل الويب

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

إليك بعض العوامل التي يمكن أن تؤثر على قرارك:

  • حجم الجهد المبذول للتعلم: يعتمد الجهد المبذول لتعلم إطار عمل الويب على مدى معرفتك بلغة البرمجة الأساسية وتناسق واجهة برمجة التطبيقات الخاصة به وجودة توثيقه وحجم ونشاط مجتمعه. إذا لم تكن لديك خبرةٌ في البرمجة إطلاقًا، ففكر في إطار عمل جانغو الذي يُعَد من أسهل أطر العمل للتعلم بناءً على المعايير التي ذكرناها سابقًا؛ بينما إذا كنت جزءًا من فريق تطوير لديه خبرةٌ فعلية كبيرة في إطار عمل ويب معين أو لغة برمجة معينة، فلا بُد أنك ستتمسّك بها طبعًا.
  • الإنتاجية: هي مقياس لمدى السرعة التي يمكنك بها إنشاء ميزات جديدة بمجرد أن تكون على دراية بإطار العمل، وتتضمن كلًا من الجهد المبذول لكتابة الشيفرة البرمجية وصيانتها، إذ لا يمكنك كتابة ميزات جديدة عندما تكون الميزات القديمة معطلة. تتشابه العديد من العوامل التي تؤثر على الإنتاجية مع عوامل حجم الجهد المبذول للتعلم، مثل التوثيق والمجتمع والخبرة في البرمجة وغيرها من العوامل التي نوضّحها فيما يلي:
    • هدف أو أصل إطار العمل: اُنشِأت بعض أطر عمل الويب في البداية لحل أنواع معينة من المشاكل والعمل بصورة أفضل على إنشاء تطبيقات الويب ذات القيود المماثلة؛ فمثلًا أُنشِئ إطار عمل جانغو لدعم تطوير موقع ويب لصحيفة، لذا يُعَد جيدًا للمدونات والمواقع الأخرى التي تتضمن عمليات نشر؛ بينما يُعَد إطار عمل فلاسك أخف بكثير وهو رائع لإنشاء تطبيقات الويب التي تعمل على الأجهزة المُضمَّنة.
    • إطار العمل القائم على رأيه Opinionated وغير القائم على رأيه Unopinionated: إطار العمل القائم على رأيه هو إطار العمل الذي توجد فيه طرق أفضل موصَى بها لحل مشكلة معينة، وتميل إلى أن تكون أكثر إنتاجية عندما تحاول حل المشاكل الشائعة، لأنها تقودك في الاتجاه الصحيح، ولكنها تكون أقل مرونة أحيانًا.
    • إطار العمل الذي يتضمن كل شيء Batteries included وإطار العمل الذي تضطر للبحث فيه عن كل شيء بنفسك get it yourself: تتضمن بعض أطر عمل الويب أدوات أو مكتبات تعالج كل مشكلة يمكن لمطوريها التفكير فيها افتراضيًا، مثل إطار عمل جانغو، بينما تتوقع الأطر الأخف وزنًا أن يحدد ويختار مطورو الويب حلًا للمشاكل من مكتبات منفصلة مثل إطار عمل فلاسك خفيف الوزن. يكون البدء في أطر العمل التي تتضمن كل شيء أسهل لأن لديك كل ما تحتاجه فعليًا، ويُحتمَل أن تكون متكاملة وذات توثيق جيد، لكن إذا احتوى إطار العمل الأصغر على كل ما تحتاجه، فيمكن تشغيله في بيئات أكثر تقييدًا وسيكون لديه مجموعةً أصغر وأسهل من الأشياء لتعلّمها.
    • إطار العمل الذي يشجع ممارسات التطوير الجيدة وإطار العمل الذي لا يشجع ذلك، إذ ينتج مثلًا عن إطار العمل -الذي يشجّع بنية نموذج-عرض-مُتحكِّم Model-View-Controller لفصل الشيفرة البرمجية إلى دوال منطقية- شيفرةٌ برمجية أكثر قابلية للصيانة من الشيفرة البرمجية التي ليس لديها أيّ توقعات بشأن المطورين، كما يمكن أن يكون لتصميم إطار العمل تأثير كبير على مدى سهولة اختبار وإعادة استخدام الشيفرة البرمجية.
  • أداء لغة البرمجة أو إطار العمل: لا تُعَد السرعة عادةً العامل الأكبر في الاختيار لأن أوقات التشغيل البطيئة نسبيًا مثل لغة بايثون تكون أكثر من "جيدة" للمواقع متوسطة الحجم التي تعمل على عتاد متوسط. يمكن تعويض فوائد هذه السرعة المحسوسة للغة أخرى مثل لغة C++‎ أو جافا سكريبت من خلال تكاليف التعلم والصيانة.
  • دعم التخزين المؤقت Caching: يمكن أن يصبح موقعك الويب أنجح، وبالتالي ستجد أنه لم يعد قادرًا على التعامل مع عدد الطلبات التي يتلقاها عندما يصل المستخدمون إليه، وبالتالي يمكن أن تفكر في إضافة دعم للتخزين المؤقت الذي يمثّل تحسينًا عندما تخزّن كل استجابة الويب أو جزءًا منها بحيث لا يلزم إعادة حسابها في الطلبات اللاحقة. تُعَد استعادة استجابة مُخزَّنة مؤقتًا أسرع بكثير من حساب الاستجابة. يمكن تقديم التخزين المؤقت في شيفرتك البرمجية أو الخادم (اطّلع على الوسيط العكسي Reverse Proxy)، وسيكون لأطر عمل الويب مستويات مختلفة من الدعم لتحديد المحتوى الممكن تخزينه مؤقتًا.
  • قابلية التوسع: إذا أصبح موقعك ناجحًا جدًا، فستُستنفَد فوائد التخزين المؤقت ويمكن أن تصل إلى حدود التوسع الرأسي Vertical Scaling أي تشغيل تطبيق الويب على عتاد أقوى، وبالتالي ستحتاج إلى التوسع أفقيًا (مشاركة الحِمل من خلال توزيع موقعك على عدد من خوادم الويب وقواعد البيانات)، أو التوسع جغرافيًا، إذ يقيم بعض عملائك بعيدًا عن خادمك. يمكن أن يُحدِث إطار عمل الويب الذي تختاره فرقًا كبيرًا في مدى سهولة توسيع نطاق موقعك.
  • أمان الويب: توفر بعض أطر عمل الويب دعمًا أفضل للتعامل مع هجمات الويب الشائعة. يعقّم Sanitize إطار عمل جانغو مثلًا جميع مدخلات المستخدم من قوالب HTML، وبالتالي لا يمكن تشغيل شيفرة جافا سكريبت التي أدخلها المستخدم. توفر أطر العمل الأخرى حمايةً مماثلة، ولكن لا تُفعَّل دائمًا افتراضيًا.

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

إذا كنت مبتدئًا في البرمجة، فيُحتمَل أن تختار إطار عملك بناءً على أساس سهولة التعلم. يُعَد التوثيق أو البرامج التعليمية عالية الجودة والمجتمع النشط الذي يساعد المستخدمين الجدد أكثر مواردك قيمةً، إضافةً إلى سهولة استخدام اللغة نفسها. اخترنا إطار عمل جانغو بلغة بايثون و Express باستخدام Node/JavaScript لكتابة أمثلتنا، ويرجع ذلك أساسًا إلى أنها سهلة التعلم ولديها دعمٌ جيد.

ملاحظة: يمكننا زيارة مواقع الويب الرسمية لإطار عمل جانغو بلغة بايثون و Express باستخدام Node/JavaScript للتحقق من توثيقها ومجتمعها.

  1. انتقل إلى المواقع الرسمية.
    • انقر على روابط قائمة التوثيق التي تحتوي أشياءً بأسماء مثل "Documentation و Guide و API Reference و Getting Started" وغير ذلك.
    • هل يمكنك رؤية موضوعات توضّح كيفية إعداد توجيه عناوين URL والقوالب وقواعد البيانات والنماذج؟
    • هل التوثيق واضح؟
  2. انتقل إلى القوائم البريدية الخاصة بكل موقع (يمكن الوصول إليها من روابط المجتمع).
    • كم عدد الأسئلة المنشورة في الأيام القليلة الماضية؟
    • كم عدد الردود؟
    • هل لديها مجتمع نشط؟

أطر عمل الويب الجيدة

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

إطار عمل جانغو Django باستخدام لغة بايثون

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

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

تشمل المواقع الشهيرة التي تستخدم إطار عمل جانغو (من صفحته الرئيسية): ديسكاس Disqus وإنستغرام Instagram و Knight Foundation و MacArthur Foundation وموزيلا Mozilla وناشونال جيوغرافيك National Geographic و Open Knowledge Foundation وبنترست Pinterest وأوبن ستاك Open Stack.

إطار عمل فلاسك باستخدام لغة بايثون

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

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

إطار عمل Express باستخدام Node.js/JavaScript

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

إطار عمل Express شائع الاستخدام، ويرجع ذلك إلى أنه يسهل عملية التهجير migration على مبرمجي الويب باستخدام لغة جافا سكريبت من طرف العميل إلى التطوير من طرف الخادم، ولأنه فعّال في استخدام الموارد، إذ تستخدم بيئة Node الأساسية مهامًا متعددة خفيفة الوزن ضمن خيط Thread بدلًا من إنتاج عمليات منفصلة لكل طلب ويب جديد.

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

تعتمد العديد من أطر العمل الشائعة من طرف الخادم والشاملة (التي تتضمن أطر عمل من طرف الخادم والعميل) على إطار عمل Express بما في ذلك أطر عمل Feathers و ItemsAPI و KeystoneJS و Kraken و LoopBack و MEAN و Sails، كما تستخدم الكثير من الشركات المرموقة إطار عمل Express بما في ذلك شركات أوبر Uber و Accenture و IBM وغيرها. اطّلع على قائمة هذه الشركات الكاملة.

إطار عمل دينو Deno باستخدام لغة جافا سكريبت

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

إطار عمل دينو مدعوم من طرف مكتبة Tokio التي توفّر وقت تنفيذ غير متزامن قائم على لغة رست وتتيح لإطار عمل دينو خدمة صفحات الويب بصورة أسرع، وتدعم WebAssembly داخليًا، والذي يتيح تصريف Compilation الشيفرة الثنائية لاستخدامها من طرف العميل. يهدف دينو إلى سد بعض الثغرات في بيئة Node.js من خلال توفير آلية تحافظ على أمان أفضل.

تشمل ميزات إطار عمل دينو ما يلي:

  • الأمان افتراضيًا، إذ تقيّد وحدات دينو أذونات الوصول إلى الملفات، أو الشبكة، أو البيئة ما لم يُسمَح بذلك صراحةً.
  • يدعم لغة TypeScript.
  • آلية انتظار من الدرجة الأولى.
  • أداة اختبار ومنسّق شيفرة برمجية مُدمَجَين (deno fmt).
  • التوافق مع المتصفحات (جافا سكريبت): يجب أن تعمل برامج دينو المكتوبة كاملًا بلغة جافا سكريبت باستثناء فضاء الأسماء Deno، أو ميزاتها التي جرى اختبارها، مباشرةً في أيّ متصفح حديث.
  • تجميع السكريبت في ملف جافا سكريبت واحد.

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

إطار عمل روبي أون ريلز Ruby on Rails باستخدام لغة روبي Ruby

ريلز -أو كما يشار إليه عادةً باسم روبي أون ريلز- هو إطار عمل ويب مكتوب للغة البرمجة روبي. يتبع ريلز فلسفة تصميم مشابهة جدًا لفلسفة إطار عمل جانغو من خلال توفير آليات معيارية لتوجيه عناوين URL والوصول إلى البيانات من قاعدة بيانات وإنشاء شيفرة HTML من القوالب وتنسيق البيانات بتنسيق JSON أو XML. يشجّع إطار عمل ريلز على استخدام أنماط التصميم، مثل نمط DRY "لا تكرر نفسك Don't Repeat Yourself" -أي كتابة الشيفرة البرمجية مرة واحدة فقط إذا كان ذلك ممكنًا- ونمط MVC وهو نموذج-عرض-متحكِّم Model-View-Controller وغير ذلك.

هناك طبعًا عدة اختلافات بسبب قرارات التصميم وطبيعة لغات البرمجة.

اُستخدِم إطار عمل ريلز للمواقع البارزة مثل Basecamp وغيت هب GitHub و Shopify و Airbnb و Twitch وساوند كلاود SoundCloud وهولو Hulu و Zendesk و Square و Highrise.

إطار عمل لارافيل Laravel باستخدام لغة PHP

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

  • محرّك توجيه بسيط وسريع.
  • حاوية حقن اعتماديات قوية.
  • نهايات خلفية متعددة لتخزين الجلسة والذاكرة المؤقتة.
  • قاعدة بيانات ORM معبّرة وبديهية.
  • عمليات تهجير حيادية لمخطط قاعدة البيانات.
  • معالجة خلفية قوية.
  • بث الحدث في الوقت الفعلي.

يُعَد إطار عمل لارافيل شاملًا، وهو قوي ويوفر الأدوات اللازمة للتطبيقات الكبيرة والقوية.

إطار عمل ASP.NET

ASP.NET هو إطار عمل ويب مفتوح المصدر طوّرته مايكروسوفت لبناء تطبيقات وخدمات الويب الحديثة. يمكنك باستخدام إطار عمل ASP.NET إنشاء مواقع ويب تعتمد على لغات HTML و CSS وجافا سكريبت بسرعة وتوسيع نطاقها ليستخدمها ملايين المستخدمين وإضافة إمكانات أكثر تعقيدًا بسهولة مثل واجهات Web API، أو النماذج عبر البيانات، أو الاتصالات في الوقت الفعلي.

أحد العوامل المميزة لإطار عمل ASP.NET هو أنه مبني على وقت التنفيذ المشترك للغات Common Language Runtime -أو CLR اختصارًا، مما يسمح للمبرمجين بكتابة شيفرة ASP.NET باستخدام أي لغة "‎.NET" مدعومة مثل C#‎ وفيجوال بيسك Visual Basic وغيرها.

يستفيد إطار عمل ASP.NET -مثل العديد من منتجات مايكروسوفت- من أدوات ممتازة ومجانية غالبًا ومجتمع مطورين نشط وتوثيق جيد، وتستخدم العديد من الشركات إطار عمل ASP.NET مثل مايكروسوفت و Xbox.com و Stack Overflow وغيرها الكثير.

إطار عمل Mojolicious باستخدام لغة بيرل Perl

Mojolicious هو إطار عمل ويب من الجيل التالي للغة برمجة بيرل Perl.

تعلّم الكثير من الناس لغة بيرل بسبب مكتبتها الرائعة التي تُدعَى CGI في الأيام الأولى للويب، وكان الأمر بسيطًا بما يكفي للبدء دون معرفة الكثير عن اللغة ومناسبًا بما يكفي للاستمرار، إذ يطبّق إطار عمل Mojolicious هذه الفكرة باستخدام تقنيات حد النزيف Bleeding Edge، وهي نوع من التقنيات التي تصدر للجميع بالرغم من عدم اكتمال اختبارها ويمكن أن تكون غير موثوقة.

بعض الميزات التي يوفرها إطار عمل Mojolicious هي:

  • إطار عمل ويب في الوقت الفعلي لتنمية نماذج الملف الواحد الأولية بسهولة إلى تطبيقات ويب MVC جيدة التنظيم.
  • وجهات RESTful، وإضافات، وأوامر، وقوالب Perl-ish، ومفاوضات المحتوى، وإدارة الجلسات وكذلك التحقق من صحة النموذج، واختبار إطار العمل، وخادم الملفات الساكن، واكتشاف CGI/PSGI، ودعم الترميز الموحّد Unicode من الدرجة الأولى.
  • تقديم بروتوكول HTTP الشامل وبروتوكول WebSocket للعميل/الخادم مع دعم بروتوكولات IPv6 و TLS و SNI و IDNA، ووسيط HTTP/SOCKS5، ومقبس Socket نطاق يونيكس UNIX، وتقنية Comet (الاستطلاع المفتوح Long Polling)، واستمرار النشاط Keep-alive، وتجمّع الاتصالات Connection Pooling، والمهلة الزمنية، وملف تعريف الارتباط Cookie، وتعدد الأجزاء، وطريقة الضغط Gzip.
  • محللات ومولّدات ملفات JSON و HTML و XML مع دعم محدّدات CSS.
  • واجهة برمجة تطبيقات Pure-Perl النقية والقابلة للنقل وكائنية التوجّه دون أيّ سحر خفي.
  • شيفرة برمجية حديثة تعتمد على سنوات من الخبرة، وهي مجانية ومفتوحة المصدر.

إطار عمل Spring Boot باستخدام لغة جافا

يُعَد إطار عمل Spring Boot أحد المشاريع التي قدمتها منصة Spring، وهو نقطة انطلاق جيدة لتطوير الويب من طرف الخادم باستخدام لغة جافا.

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

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

الخلاصة

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

سنغير الاتجاه قليلًا في المقال التالي وسنتعمّق أكثر في مجال أمان الويب.

ترجمة -وبتصرُّف- للمقال Server-side web frameworks.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...