هناك الكثير من الحديث عنه رف، ولكن ما لم تكن مؤلف إطار العمل بنفسك ، نادرًا ما تراه. إذن ما هو الرف؟ ولماذا ، كمطور تطبيق ، يجب أن تهتم به؟
أساسيات الرف
الرف هو نوع من الوسيطة. يجلس بين تطبيق الويب الخاص بك وخادم الويب. يتعامل مع جميع مكالمات API الخاصة بالخادم ، ويمرر على طلب HTTP وجميع معلمات البيئة في التجزئة ، ويعيد استجابة تطبيقك إلى الخادم. بعبارة أخرى ، لا يحتاج تطبيقك إلى معرفة كيفية التحدث إلى خادم HTTP ، بل يحتاج إلى معرفة كيفية التحدث إلى Rack.
مزايا الرف
هذه لديها عدد من المزايا. أولاً ، التحدث إلى Rack أمر سهل (كما سترى أدناه). ثانيًا ، نظرًا لأنك تحتاج فقط إلى معرفة كيفية التحدث إلى Rack ، وأن Rack يعرف كيفية التحدث إلى العديد من خوادم HTTP المختلفة ، فسيعمل تطبيقك على أي من خوادم HTTP هذه. الرف مثل محول عالمي لتطبيقات الويب.
تطبيقات الرف نفسها ليست خاصة. في الواقع ، Rack API بسيطة للغاية ، ويمكن وصفها في جملة واحدة:
تطبيق الرف هو أي كائن روبي يستجيب لل مكالمة الطريقة ، تأخذ معلمة تجزئة واحدة وتعرض مصفوفة تحتوي على رمز حالة الاستجابة ورؤوس استجابة HTTP ونص الاستجابة كمصفوفة من السلاسل.
هذا الى حد كبير ذلك. يبدو الأمر بسيطًا جدًا بحيث يصعب تصديقه ، أو على الأقل بسيط جدًا ليكون مفيدًا ، ولكن عندما يتعلق الأمر به حقًا ، هذا كل ما تفعله حقًا عندما تتحدث إلى خوادم HTTP.
ما أهمية الرف؟
ولكن إلى السؤال الحقيقي: لماذا ، كمبرمج تطبيق ، يجب أن تهتم برف؟ حسنًا ، أولاً ، هناك تنوير دائمًا في فهم كيفية عمل إطارك. ولكن الأهم من ذلك ، هناك أشياء مفيدة يمكنك القيام بها باستخدام Rack. الأهم: الوسيطة.
الآن ، يبدو هذا غريبًا بعض الشيء. ولكن يمكن أن تكون طبقة إضافية بين التطبيق الخاص بك و Rack أمرًا جيدًا ، وتنفيذ الميزات التي من شأنها فقط تشويش التطبيق الخاص بك. ما تفعله هذه الوسيطة هو ببساطة أخذ الطلب من Rack ، وتمريره إلى التطبيق الخاص بك ، والحصول عليه الاستجابة ، أضف شيئًا إليها أو قم بتصفيةها أو شيء ما على هذه الأسطر ثم مرر الاستجابة مرة أخرى رف. يمكن استخدام هذا لتنفيذ ميزات صغيرة مثيرة للاهتمام للغاية مثل مسجل لا يعرف الخادم ، أو طلب مدقق العقلانية ، أو برنامج وسيط صغير يرسل بريدًا إلكترونيًا إلى المشرف في كل مرة يعود فيها طلبك 404. لا تحتاج أي من هذه الميزات إلى تكدس التطبيق الخاص بك ، ويمكن تنفيذها كبرنامج وسيط مع Rack.