Skip to content

الفصل 29: تطوير الويب

مقدمة

لغة ص تدعم بناء خوادم ويب كاملة عبر مكتبة شبكة. هذا الفصل يغطي بناء خوادم HTTP وAPIs وخدمات الويب.

خادم ويب بسيط

sad
استورد خادم_هتتب من "شبكة"

متغير خادم = جديد خادم_هتتب(8080)

خادم.عند("/") = دالة(طلب، رد)
    رد.ارسل_هتمل("<h1>مرحباً من لغة ص!</h1>")
نهاية

خادم.عند("/api/مستخدمين") = دالة(طلب، رد)
    متغير بيانات = [
        {"اسم": "أحمد"، "عمر": 25}،
        {"اسم": "سارة"، "عمر": 22}
    ]
    رد.ارسل_جسون(بيانات)
نهاية

اطبع_سطر("الخادم يعمل: http://localhost:8080")
خادم.ابدأ()

خادم REST API كامل

sad
استورد خادم_هتتب من "شبكة"
استورد جسون من "جسون"

# قاعدة بيانات بسيطة في الذاكرة
متغير الطلاب = [
    {"معرف": 1، "اسم": "أحمد"، "معدل": 3.8}،
    {"معرف": 2، "اسم": "سارة"، "معدل": 3.9}
]
متغير التالي = 3

متغير خادم = جديد خادم_هتتب(3000)

# جلب جميع الطلاب
خادم.عند_جلب("/api/طلاب") = دالة(طلب، رد)
    رد.ارسل_جسون(الطلاب)
نهاية

# جلب طالب بالمعرف
خادم.عند_جلب("/api/طلاب/:id") = دالة(طلب، رد)
    متغير معرف = عدد(طلب.متغيرات["id"])
    متغير طالب = لاشيء
    لكل م في الطلاب
        إذا (م["معرف"] == معرف)
            طالب = م
        نهاية
    نهاية
    إذا (طالب == لاشيء)
        رد.الحالة = 404
        رد.ارسل_جسون({"خطأ": "لم يوجد"})
    وإلا
        رد.ارسل_جسون(طالب)
    نهاية
نهاية

# إضافة طالب جديد
خادم.عند_نشر("/api/طلاب") = دالة(طلب، رد)
    متغير جديد_طالب = جسون.فك(طلب.الجسم)
    جديد_طالب["معرف"] = التالي
    التالي = التالي + 1
    الطلاب = الطلاب + [جديد_طالب]
    رد.الحالة = 201
    رد.ارسل_جسون(جديد_طالب)
نهاية

اطبع_سطر("خادم الطلاب: http://localhost:3000")
خادم.ابدأ()

الوسيطة (Middleware)

sad
استورد خادم_هتتب من "شبكة"

متغير خادم = جديد خادم_هتتب(8080)

# وسيطة تسجيل
خادم.استخدم = دالة(طلب، رد، تالي)
    اطبع_سطر(طلب.الطريقة + " " + طلب.المسار)
    تالي()
نهاية

# وسيطة المصادقة
خادم.استخدم = دالة(طلب، رد، تالي)
    متغير رمز = طلب.رؤوس["تفويض"]
    إذا (رمز == لاشيء أو رمز != "رمز-سري")
        رد.الحالة = 401
        رد.ارسل_جسون({"خطأ": "غير مصرح"})
    وإلا
        تالي()
    نهاية
نهاية

تقديم ملفات ثابتة

sad
استورد خادم_هتتب من "شبكة"

متغير خادم = جديد خادم_هتتب(8080)

# تقديم مجلد ثابت
خادم.ملفات_ثابتة("./عام")
خادم.ابدأ()

جدول طرق HTTP

الطريقةالاستخداممثال
GETجلب بياناتعند_جلب("/api/عناصر")
POSTإضافةعند_نشر("/api/عناصر")
PUTتحديثعند_تحديث("/api/:id")
DELETEحذفعند_حذف("/api/:id")

تمرين

أنشئ API كاملاً لإدارة قائمة مهام (TODO) يدعم:

  • GET /api/مهام — جلب كل المهام
  • POST /api/مهام — إضافة مهمة
  • PUT /api/مهام/:id — تحديث مهمة
  • DELETE /api/مهام/:id — حذف مهمة

مُرخَّص بموجب رخصة MIT