استورد أساسي::ويب. استورد إعدادات.لبات بسم تطبيق. شارك دالة عالج(الطلب: ويب::طلب_وارد, سياق: ويب::سياق<تطبيق::إعدادات, تطبيق::حالة>) -> ويب::استجابة_خادم { دع سابق = ويب::اقرأ_حالة(سياق). ويب::استبدل_حالة(سياق, تطبيق::حالة { عدد: سابق::عدد + 1 }). إذا الطلب::مسار يطابق "/hello" { أرجع ويب::استجابة_نصية(200, "مرحبا من ASPL", "text/plain; charset=utf-8")::قيمة. } إذا الطلب::مسار يطابق "/submit" { دع متن = ويب::فك_نص(الطلب::متن). إذا ليس متن::نجاح { أرجع ويب::استجابة_نصية(400, متن::الخطأ::الرمز, "text/plain")::قيمة. } // يعيد نص جيسون الصريح دون تحليل جيسون أو التحقق منه. أرجع ويب::استجابة_نصية(200, متن::قيمة, "application/json; charset=utf-8")::قيمة. } إذا الطلب::مسار يطابق "/bytes" { أرجع ويب::أنشئ_استجابة(200, الطلب::متن)::قيمة. } إذا الطلب::مسار يطابق "/download" { أرجع ويب::أنشئ_استجابة(200, [0, 255, 65])::قيمة. } إذا الطلب::مسار يطابق "/count" { أرجع ويب::استجابة_نصية(200, نسق_ص64(سابق::عدد), "text/plain")::قيمة. } إذا الطلب::مسار يطابق "/upstream" { دع إعداد = ويب::اقرأ_إعدادات(سياق). متغير خيارات = ويب::خيارات_طلب(). خيارات::استخدم_مرجع_خاص = صواب. خيارات::ملف_مرجع = إعداد::مرجع. دع طلب_صادر = ويب::أنشئ_طلب("GET", إعداد::خادم_بعيد)::قيمة. دع رد = ويب::اطلب(طلب_صادر, خيارات). إذا ليس رد::نجاح { أرجع ويب::استجابة_نصية(502, رد::الخطأ::الرمز, "text/plain")::قيمة. } // يمرر البايتات فقط، فقد تكون بيانات الطول والترميز المضغوط متقادمة. أرجع ويب::أنشئ_استجابة(رد::قيمة::حالة, رد::قيمة::متن)::قيمة. } إذا الطلب::مسار يطابق "/stop" { ويب::أوقف(سياق). } أرجع ويب::أنشئ_استجابة(200, [])::قيمة. } شارك دالة وجهات() -> ويب::موجه<تطبيق::إعدادات, تطبيق::حالة> { أرجع ويب::أنشئ_موجه([ ويب::أنشئ_وجهة("GET", "/hello", عالج)::قيمة, ويب::أنشئ_وجهة("POST", "/submit", عالج)::قيمة, ويب::أنشئ_وجهة("POST", "/bytes", عالج)::قيمة, ويب::أنشئ_وجهة("GET", "/download", عالج)::قيمة, ويب::أنشئ_وجهة("GET", "/count", عالج)::قيمة, ويب::أنشئ_وجهة("GET", "/upstream", عالج)::قيمة, ويب::أنشئ_وجهة("POST", "/stop", عالج)::قيمة ])::قيمة. }