واجهة بوابة خادم الويب

واجهة بوابة خادم الويب ( WSGI ، تُنطق ويسكي [ 1 ] [ 2 ] أو ويز -غي [ 3 ] ) هي اصطلاح استدعاء بسيط لخوادم الويب لإعادة توجيه الطلبات إلى تطبيقات الويب أو أطر العمل المكتوبة بلغة برمجة بايثون . الإصدار الحالي من WSGI، وهو الإصدار 1.0.1، مُحدد في اقتراح تحسين بايثون (PEP) رقم 3333. [ 4 ]

تم تحديد WSGI في الأصل باسم PEP-333 في عام 2003. [ 5 ] PEP-3333، الذي نُشر في عام 2010، يُحدّث المواصفات لـ Python 3 .

خلفية

في عام 2003، كانت أطر عمل الويب الخاصة بلغة بايثون تُكتب عادةً باستخدام CGI أو FastCGI أو mod_python أو واجهة برمجة تطبيقات مخصصة أخرى لخادم ويب معين . [ 6 ] لنقتبس من PEP 333:

تزخر لغة بايثون حاليًا بمجموعة واسعة من أطر عمل تطبيقات الويب، مثل Zope وQuixote وWebware وSkunkWeb وPSO وTwisted Web، على سبيل المثال لا الحصر. قد يُمثل هذا التنوع الكبير في الخيارات مشكلةً لمستخدمي بايثون الجدد، لأن اختيارهم لإطار عمل الويب سيُحدّ من خياراتهم من خوادم الويب المُتاحة، والعكس صحيح. في المقابل، ورغم أن لغة جافا تُوفر عددًا مماثلًا من أطر عمل تطبيقات الويب، إلا أن واجهة برمجة تطبيقات "servlet" الخاصة بها تُتيح تشغيل التطبيقات المكتوبة بأي إطار عمل لتطبيقات الويب في جافا على أي خادم ويب يدعم واجهة برمجة تطبيقات servlet.

وهكذا تم إنشاء WSGI كواجهة محايدة للتنفيذ بين خوادم الويب وتطبيقات الويب أو أطر العمل لتعزيز أرضية مشتركة لتطوير تطبيقات الويب المحمولة . [ 4 ]

نظرة عامة على المواصفات

للمنظمة العالمية لصناعات الأدوية وجهان:

  • جانب الخادم /البوابة. غالبًا ما يكون هذا الجانب عبارة عن تشغيل برنامج خادم ويب كامل مثل Apache أو Nginx ، أو خادم تطبيقات خفيف الوزن يمكنه التواصل مع خادم ويب، مثل flup .
  • جانب التطبيق/الإطار البرمجي. هذا دالة قابلة للاستدعاء في بايثون، يتم توفيرها بواسطة برنامج بايثون أو الإطار البرمجي.

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

لا يحدد WSGI كيفية بدء تشغيل مترجم بايثون، ولا كيفية تحميل كائن التطبيق أو تكوينه، وتحقق الأطر وخوادم الويب المختلفة ذلك بطرق مختلفة.

برنامج وسيط WSGI

مكون وسيط WSGI هو دالة بايثون قابلة للاستدعاء، وهي في حد ذاتها تطبيق WSGI، ولكنها قد تعالج الطلبات عن طريق تفويضها إلى تطبيقات WSGI أخرى. ويمكن أن تكون هذه التطبيقات نفسها مكونات وسيط WSGI. [ 7 ]

يمكن لمكون البرمجيات الوسيطة أن يؤدي وظائف مثل: [ 7 ]

  • توجيه الطلب إلى كائنات التطبيق المختلفة بناءً على عنوان URL المستهدف ، بعد تغيير متغيرات البيئة وفقًا لذلك.
  • السماح بتشغيل تطبيقات أو أطر عمل متعددة جنبًا إلى جنب في نفس العملية
  • موازنة الأحمال والمعالجة عن بُعد، من خلال إعادة توجيه الطلبات والاستجابات عبر الشبكة
  • إجراء معالجة لاحقة للمحتوى، مثل تطبيق أوراق أنماط XSLT

أمثلة

تطبيق نموذجي

تطبيق " مرحباً بالعالم! " متوافق مع WSGI مكتوب بلغة بايثون :

دالة التطبيق ( البيئة ، استجابة البدء ):start_response ( "200 OK" , [( "Content-Type" , "text/plain" )])yield b "مرحباً بالعالم! " \n

أين:

  • يُعرّف السطر 1 دالةً [ 8 ] تُسمى application، تأخذ مُعاملين، environو start_response. environهو قاموس يحتوي على متغيرات بيئة CGI بالإضافة إلى مُعاملات الطلب الأخرى والبيانات الوصفية تحت مفاتيح مُحددة جيدًا. [ 9 ]start_response هي دالة قابلة للاستدعاء، تأخذ مُعاملين موضعيين، statusو response_headers.
  • يقوم السطر 2 باستدعاءات start_response، مع تحديد "200 OK" كحالة HTTP ورأس استجابة "Content-Type".
  • يحوّل السطر 3 الدالة إلى مولد . ويتم إرجاع نص الاستجابة كسلسلة بايتات قابلة للتكرار .

مثال على استدعاء تطبيق

لا يتناول هذا المقال مثالًا كاملًا لخادم شبكة WSGI. فيما يلي رسم تخطيطي لكيفية استدعاء تطبيق WSGI واسترجاع سطر حالة HTTP، وعناوين الاستجابة، وجسم الاستجابة، ككائنات بايثون. [ 10 ]environ تم حذف تفاصيل كيفية إنشاء القاموس.

من io استورد BytesIOدالة استدعاء التطبيق ( التطبيق ، البيئة ): الحالة = لا شيء ، الرؤوس = لا شيء، الجسم = بايتات الإدخال/الإخراج ()دالة بدء الاستجابة ( حالة الاستجابة ، رؤوس الاستجابة ) : حالة غير محلية ، رؤوس الاستجابة = حالة الاستجابة ، رؤوس الاستجابةapp_iter = app ( environ , start_response ) try : for data in app_iter : assert ( status is not None and headers is not None ), " start_response () was not called" body.write ( data ) finally : if hasattr ( app_iter , " close " ) : app_iter.close ( ) return status , headers , body.getvalue ( )environ = { ... } # "environ" dict status , headers , body = call_application ( app , environ )

التطبيقات والأطر المتوافقة مع WSGI

تدعم العديد من أطر عمل الويب تقنية WSGI:

تتوفر حاليًا أغلفة لـ FastCGI و CGI و SCGI و AJP (باستخدام flup) و twisted.web و Apache (باستخدام mod_wsgi أو mod_python ) و Nginx (باستخدام ngx_http_uwsgi_module) [ 27 ] و Nginx Unit (باستخدام وحدة لغة Python) [ 28 ] و Microsoft IIS (باستخدام WFastCGI، [ 29 ] و isapi-wsgi، [ 30 ] و PyISAPIe، [ 31 ] أو بوابة ASP ).

انظر أيضاً

مراجع

  1. سيميوناتو، ميشيل (11 يونيو 2007). "مقدمة في برمجة الويب باستخدام WSGI" .
  2. إيدج، جيك (9 يوليو 2019). "العبث بالأطر المصغرة" . LWN .
  3. غولدبيرغ، كيفن (9 مايو 2016). "مقدمة إلى خوادم بايثون WSGI لتحسين الأداء | AppDynamics" . مدونة مراقبة أداء التطبيقات | AppDynamics . تاريخ الاسترجاع: 20 أغسطس 2020 .
  4. 1 2 "PEP 3333 - واجهة بوابة خادم الويب بايثون الإصدار 1.0.1" . Python.org . تم الاطلاع عليه بتاريخ 2018-04-04 .
  5. "PEP 333 -- واجهة بوابة خادم الويب بايثون الإصدار 1.0" . Python.org . تم الاطلاع عليه بتاريخ 4 أبريل 2018 .
  6. "الصفحة الرئيسية - ويكي بايثون" . Python.org . تم الاطلاع عليه بتاريخ 27-01-2017 .
  7. 1 2 "PEP 3333 -- واجهة بوابة خادم الويب بايثون الإصدار 1.0.1" . Python.org . تم الاطلاع عليه بتاريخ 2018-04-04 .
  8. أي "دالة، أو طريقة، أو فئة، أو نسخة تحتوي على__call__طريقة"
  9. "PEP 3333 -- واجهة بوابة خادم الويب بايثون الإصدار 1.0.1" . Python.org . تم الاطلاع عليه بتاريخ 4 أبريل 2018 .
  10. "إنشاء برمجيات وسيطة WSGI - آلان كريستوفر توماس - Minted - PythonKC" . يوتيوب . 28 أغسطس 2015. مؤرشف من الأصل في 12 ديسمبر 2021. تم الاطلاع عليه في 27 يناير 2017 .
  11. "プエラリアジェルの効果は؟" . Bobo.digicool.com . تم الاسترجاع 2017/01/27 .
  12. "Django بدون mod_python، ودعم WSGI | مدونة | Django" . Djangoproject.com . 18-07-2005 . تاريخ الاسترجاع: 27-01-2017 .
  13. "wsgi – خادم WSGI — وثائق Eventlet 0.20.1" . Eventlet.net . تم الاطلاع عليه بتاريخ 27-01-2017 .
  14. "Falcon - إطار عمل واجهة برمجة تطبيقات الويب على الأجهزة الأساسية للغة بايثون" . تم الاطلاع عليه بتاريخ 22-10-2017 .
  15. "gevent-fastcgi 1.0.2.1 : فهرس حزم بايثون" . Pypi.python.org . 2015-12-06 . تم الاطلاع عليه بتاريخ 2017-01-27 . 
  16. "anomaly/prestans: إطار عمل مصغر REST متوافق مع WSGI" . GitHub.com . تم الاطلاع عليه بتاريخ 27 يناير 2017 .
  17. "أرشيف جوجل كود - تخزين طويل الأمد لاستضافة مشاريع جوجل كود" . Code.google.com . تم الاطلاع عليه بتاريخ 27 يناير 2017 .
  18. "إطار عمل Pycnic" . Pycnic.nullism.com . تم الاطلاع عليه بتاريخ 27-01-2017 .
  19. "theintencity/restlite: أدوات خادم RESTful خفيفة الوزن في بايثون" . GitHub.com . تم الاطلاع عليه بتاريخ 27 يناير 2017 .
  20. "Socketify: توفير خوادم عالية الأداء لبروتوكولات HTTP/HTTPS وWebSockets لـ PyPy3 وPython3" . GitHub.com . تم الاطلاع عليه بتاريخ 12 أغسطس 2025 .
  21. "limodou/uliweb: إطار عمل ويب بسيط وسهل الاستخدام بلغة بايثون" . GitHub.com . تم الاطلاع عليه بتاريخ 27 يناير 2017 .
  22. "وثائق Waitress" . docs.pylonsproject.org . تم الاطلاع عليه بتاريخ 26-09-2018 .
  23. "مرحباً بكم في" . Web.py. 2009-09-11 . تم الاسترجاع في 2017-01-27 .
  24. "weblayer — توثيق weblayer الإصدار 0.4.3" . Packages.python.org . تم الاطلاع عليه بتاريخ 27 يناير 2017 .
  25. "مرحباً | Werkzeug (مكتبة أدوات بايثون WSGI)" . Werkzeug.pocoo.org . تم الاطلاع عليه بتاريخ 27 يناير 2017 .
  26. "خادم CalDAV و CardDAV - خادم بسيط للتقويم وجهات الاتصال" . Radicale.org . تم الاطلاع عليه بتاريخ 27 يناير 2017 .
  27. "الوحدة النمطية ngx_http_uwsgi_module" . Nginx.org . تم الاطلاع عليه بتاريخ 27-01-2017 .
  28. "التكوين - وحدة NGINX" . Unit.nginx.org . تم الاطلاع عليه بتاريخ 4 مايو 2023 .
  29. "أدوات بايثون لـ Visual Studio - التوثيق" . Pytools.codeplex.com . تم الاطلاع عليه بتاريخ 27 يناير 2017 .
  30. "أرشيف جوجل كود - تخزين طويل الأمد لاستضافة مشاريع جوجل كود" . Code.google.com . تم الاطلاع عليه بتاريخ 27 يناير 2017 .
  31. "تنزيل إضافة Python ISAPI لـ IIS | SourceForge.net" . Pyisapie.sourceforge.net . 24-04-2012 . تاريخ الاسترجاع: 27-01-2017 .