طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 132 · تقنيات تطوير الواجهات الخلفية
الدرس 1 · الوحدة 1: تطوير المنطق لمعالجة الطلبات

كيف يعمل الويب من جهة الخادم؟

ماذا يحدث بين ضغطك على رابط وظهور الصفحة؟ ⏱ نحو 25 دقيقة.

بعد هذا الدرس ستستطيع أن:
  • تميّز الواجهة الأمامية من الواجهة الخلفية ودور كل منهما.
  • تشرح رحلة الطلب في نموذج العميل والخادم.
  • تقرأ أجزاء طلب HTTP واستجابته، وتفسّر رموز الحالة.
  • تحلّل وظائف تطبيق إلى طلبات GET و POST.

١الواجهة الأمامية والواجهة الخلفية

في مقرر 131 بنيت الواجهة الأمامية Front-end: ما يراه المستخدم ويتفاعل معه في المتصفح. لكن أغلب المواقع تحتاج جزءًا آخر لا يراه أحد: الواجهة الخلفية Back-end، وهي برنامج يعمل على جهاز بعيد اسمه الخادم Server.

فكّر في مطعم: الصالة والقائمة والنادل هي الواجهة الأمامية، والمطبخ هو الواجهة الخلفية. الزبون لا يدخل المطبخ، بل يطلب، فيُحضَّر الطلب في الداخل ويصله جاهزًا.

الواجهة الأماميةالواجهة الخلفية
أين تعمل؟في متصفح المستخدمعلى الخادم
اللغاتHTML و CSS و JavaScriptPHP (مقررنا)، أو بايثون، أو Node.js، أو Java…
مهامهاالعرض والتنسيق والتفاعلحفظ البيانات، والتحقق من كلمة المرور، والحسابات، وإرسال البريد
من يرى الكود؟أي مستخدم (اعرض مصدر الصفحة)لا أحد غير المطوّر: المستخدم يرى النتيجة فقط

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

٢رحلة الطلب: العميل والخادم

كل صفحة تفتحها هي حوار قصير بين طرفين: العميل Client (المتصفح) يرسل طلبًا Request، والخادم يرد بـاستجابة Response. هذا هو نموذج العميل والخادم.

المتصفحالعميل (Client)HTML · CSS · JSالخادمApache + PHPhello.phpيشغّل الكود ويبني الصفحةقاعدة البياناتMySQL① الطلب④ الاستجابة② استعلام③ البياناتالمتصفح لا يرى كود PHP أبدًا: يصله فقط ما يطبعه الكود (HTML أو JSON).
رحلة الطلب: المتصفح يطلب، والخادم يشغّل PHP ويستعين بقاعدة البيانات، ثم يرد بصفحة جاهزة.
  1. تكتب العنوان http://localhost/hello.php أو تضغط رابطًا أو ترسل نموذجًا، فيرسل المتصفح طلب HTTP.
  2. يستقبل برنامج الخادم (مثل Apache) الطلب، ويجد الملف hello.php، فيسلّمه لـ PHP ليشغّله.
  3. كود PHP يقرأ ما في الطلب، وقد يسأل قاعدة البيانات، ثم يطبع صفحة HTML.
  4. يعيد الخادم ما طبعه الكود في استجابة HTTP، فيعرضها المتصفح كأي صفحة عادية.

٣شكل طلب HTTP

الطلب رسالة نصية بسيطة. هذا ما يرسله المتصفح فعلًا حين تفتح hello.php?name=سعود:

طلب HTTP · من المتصفح إلى الخادم
GET /hello.php?name=سعود HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 10.0) Chrome/130
Accept: text/html
Accept-Language: ar
الجزءمثالهمعناه
الطريقة MethodGETماذا تريد؟ GET تعني «أعطني». وPOST تعني «خذ هذه البيانات».
المسار Path/hello.phpأي ملف أو مورد تطلب من الخادم.
سلسلة الاستعلام Query string?name=سعودبيانات صغيرة بعد علامة ؟ على شكل اسم=قيمة.
الترويسات HeadersHost: localhostمعلومات إضافية: اسم الموقع، ونوع المتصفح، واللغة، والكوكيز.
الجسم Body(فارغ هنا)بيانات كبيرة يرسلها العميل، مثل محتوى نموذج التسجيل. يأتي بعد سطر فارغ.

وأشهر طريقتين ستستخدمهما في المقرر كله:

الطريقةمتى؟أين البيانات؟
GETلجلب صفحة أو بيانات: فتح صفحة، بحث، تصفيةفي الرابط نفسه بعد ؟
POSTلإرسال بيانات تغيّر شيئًا: تسجيل، دخول، إضافة طلبفي جسم الطلب، لا تظهر في الرابط

٤شكل استجابة HTTP

ويرد الخادم برسالة لها الشكل نفسه تقريبًا: سطر الحالة، ثم الترويسات، ثم سطر فارغ، ثم الجسم (محتوى الصفحة):

استجابة HTTP · من الخادم إلى المتصفح
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 61
 
<h1>أهلًا يا سعود</h1><p>وصل طلبك بالطريقة: GET</p>

أهم ما في الاستجابة رمز الحالة Status code: رقم من ثلاث خانات يلخّص النتيجة، وأول خانة تحدد عائلته:

العائلةالمعنىأشهر الرموز
2xx نجاحتم الطلب بنجاح200 OK نجح. 201 Created أُنشئ عنصر جديد.
3xx تحويلاذهب إلى عنوان آخر301 نُقلت الصفحة نهائيًّا. 302 Found اذهب مؤقتًا إلى العنوان في الترويسة Location.
4xx خطأ من العميلالطلب نفسه فيه مشكلة400 بيانات غير صحيحة. 401 سجّل دخولك أولًا. 403 ممنوع. 404 Not Found غير موجود.
5xx خطأ في الخادمالطلب سليم لكن الخادم فشل500 Internal Server Error غالبًا خطأ في كود PHP.

٥صفحة ثابتة أم صفحة ديناميكية؟

ملف about.html ثابت Static: يرسله الخادم كما هو لكل زائر. أما ملف PHP فهو ديناميكي Dynamic: يشغّله الخادم مع كل طلب، فقد يبني صفحة مختلفة لكل زائر.

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

<?php// hello.php: صفحة واحدة، وردود مختلفة حسب الطلب$name = $_GET['name'] ?? 'زائر';echo "<h1>أهلًا يا $name</h1>";echo "<p>وصل طلبك بالطريقة: " . $_SERVER['REQUEST_METHOD'] . "</p>";

لا تقلق من تفاصيل الكود الآن؛ ستكتب مثله في الدرسين القادمين. لاحظ فقط: الطلب الثالث بلا اسم، فاستخدم الكود القيمة البديلة «زائر».

والأهم: افتح تبويب 📄 المصدر في أي استجابة. لن تجد فيها $name ولا echo، بل HTML فقط. فكود PHP يبقى على الخادم، ولا يصل للمتصفح إلا ناتجه.

٦حلّل قبل أن تبرمج: ما الطلبات التي يحتاجها التطبيق؟

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

الوظيفةالطلبماذا يفعل الخادم؟
عرض نموذج التسجيلGET /register.phpيرسل صفحة فيها النموذج.
إرسال بيانات التسجيلPOST /register.phpيتحقق من البيانات، ويحفظها، ثم يرد برسالة تأكيد.
عرض قائمة المسجلينGET /list.phpيتأكد أن الطالب مشرف، ثم يقرأ المسجلين ويبني جدولًا.
البحث عن متدربGET /list.php?q=سعودمثل السابق، لكن يعرض من يطابق البحث فقط.

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

٧تعرّف على مختبر الخادم

في هذا المقرر لن تحتاج تثبيت أي شيء لتجرّب: كل مثال فيه زر ✏️ جرّب وعدّل يفتح مختبر الخادم، وهو PHP 8.2 حقيقي يعمل داخل متصفحك. وفي المختبر:

🧪 مختبر الخادماضغط ▶ تشغيل، ثم غيّر الاسم في شريط العنوان واضغط «اذهب». جرّب أيضًا عنوانًا غير موجود مثل /about.php ولاحظ رمز الحالة.

توقّع وتحقّق

أين يعمل كود PHP؟

الخادم يشغّله ويرسل الناتج.

رمز الحالة 404 يعني:

من عائلة 4xx: مشكلة في الطلب.

لإرسال بيانات نموذج تسجيل جديد نستخدم غالبًا:

لأنه يغيّر شيئًا على الخادم.

في الطلب GET /search.php?q=قهوة ، الجزء ?q=قهوة يسمى:

Query string: اسم=قيمة بعد علامة ؟

الخلاصة

تحدٍّ تصميمي: حلّل واجهة خلفية لمكتبة الكلية

سهل

مكتبة الكلية تريد موقعًا بسيطًا: «يبحث المتدرب عن كتاب بعنوانه، ويرى تفاصيل كتاب معيّن، ويحجز كتابًا متاحًا. ويضيف أمين المكتبة كتبًا جديدة». قبل أي كود، حلّل الطلبات في جدول كالذي في القسم 6، ثم سلّمه لمعلمك.

المطلوب:
  • اكتب كل وظيفة في صف: الوظيفة، والطريقة والمسار، وماذا يفعل الخادم.
  • اختر GET أو POST لكل وظيفة، وعلّل اختيارك بجملة.
  • اقترح رمز الحالة المناسب لحالتين: كتاب غير موجود، وحجز ناجح.
☑ راجع عملك قبل التسليم:
💡 تلميح 1
ابدأ من الأفعال في الوصف: يبحث، يرى، يحجز، يضيف. كل فعل وظيفة.
💡 تلميح 2
هل الوظيفة تغيّر شيئًا على الخادم (حجز، إضافة)؟ إذن POST.
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس