«`مطالب این مقاله از`  `در تاریخ ‎۵ تیر ۱۴۰۰ ترجمه شده‌است.`»

رابط دروازه وب سرور
===================

رابط دروازه وب سرور (WSGI ، ویسکی تلفظ می شود یا wiz - ghee ) یک کنوانسیون تماس ساده برای سرورهای وب برای ارسال درخواست ها به برنامه های وب یا فریم وورک های نوشته شده در زبان برنامه نویسی پایتون است. نسخه فعلی WSGI ، نسخه 1.0.1 ، در Python Enhancement Proposal (PEP) 3333 مشخص شده است. 

WSGI ابتدا در PEP - 333 در سال 2003 منتشر شد. [5] PEP - 3333 ، که در سال 2010 منتشر شد ، مشخصات را برای Python 3 به روز می کند.

پس زمینه
--------

در سال 2003 ، چارچوب های وب پایتون معمولاً فقط در برابر CGI ، FastCGI ، mod \_ python یا برخی دیگر از API های سفارشی وب سرور خاص نوشته می شدند. [6] به نقل از PEP 333:

در حال حاضر پایتون از طیف گسترده ای از چارچوب های برنامه وب ، مانند Zope ، Quixote ، Webware ، SkunkWeb ، PSO و Twisted Web - دارای چند مورد است. این تنوع گسترده در انتخاب می تواند برای کاربران جدید پایتون مشکل ساز شود ، زیرا به طور کلی ، انتخاب فریموورک وب باعث محدود شدن انتخاب وب سرورهای قابل استفاده می شود و بالعکس ... در مقابل ، اگرچه جاوا به همان تعداد چارچوب برنامه های وب دارد ولی API "servlet" جاوا این امکان را برای برنامه های نوشته شده با هر فریموورک وب جاوا فراهم می کند تا در هر وب سروری که از servlet API پشتیبانی می کند ، اجرا شوند.

بنابراین WSGI به عنوان یک پیاده سازی ایجاد شد -تا رابط بین وب سرورها و برنامه های وب باا چارچوب ها برای ایجاد زمینه های مشترک برای توسعه برنامه های وب پرتابل. 

مرور مشخصات
-----------

WSGI دو سمت دارد:

سمت سرور / دروازه. این برنامه اغلب در حال اجرای کامل نرم افزار وب سرور مانند Apache یا Nginx است یا یک سرور کاربردی سبک است که می تواند با یک سرور وب مانند flup ارتباط برقرار کند.

سمت برنامه / چارچوب. این سمت ازحنس پایتون است که می تواند توسط برنامه یا فریموورک پایتون تهیه شود.

بین سرور و برنامه ، ممکن است یک یا چند اجزای میان افزار ی وجود داشته باشد که هر دو طرف API را اجرا می کنند ، معمولاً در زبان پایتون.

WSGI مشخص نمی کند که چگونه مفسر Python باید راه اندازی شود و همچنین نحوه بارگیری یا پیکربندی شی application برنامه مشخص نیست و چارچوب ها و سرورهای مختلف به روش های مختلف به این هدف دست می یابند.

میان افزار WSGI
---------------

یک جز میان افزار WSGI یک فراخوان پایتون است که خود یک برنامه WSGI است ، اما ممکن است با تفویض اختیار به سایر برنامه های WSGI درخواست ها را کنترل کند. این برنامه ها می توانند خود مؤلفه های میان افزار WSGI باشند.

یک جز میان افزار می تواند چنین عملکردهایی را انجام دهد: 

* مسیریابی درخواست به اشیا مختلف برنامه بر اساس URL هدف ، پس از تغییر متغیرهای محیط متناسب با آن.

* اجازه دادن به فعالیت در کنار هم چندین برنامه یا فریموورک در یک فرآیند

* انجام تعادل بار و پردازش از راه دور با انتقال درخواست ها و پاسخ ها از طریق شبکه

* انجام پس پردازش روی محتوا ، مانند استفاده از استایل شیت های XSLT

مثال
----

### اپلیکیشن نمونه

برنامه "Hello, World" سازگار با WSGI که در پایتون نوشته شده است:

```
def application(environ, start\_response):
    start\_response('200 OK', [('Content-Type', 'text/plain')])
    yield b'Hello, World!\n'

```
جایی که :

* خط 1 یک تابع [8] با نام application را تعریف می کند ، که دو پارامتر environ و start\_response را می گیرد. environ یک دیکشنری است که شامل متغیرهای محیط CGI و سایر پارامترهای درخواست و متادیتا تحت کلیدهای خوش تعریف است. start\_response با استفاده از دو پارامتر موقعیتی ، status و response\_headers قابل احضار است.

* خط 2 start\_response را صدا می کند ، "200 OK" را به عنوان وضعیت HTTP و یک سرآیند "Content-Type" را مشخص می کند.

* خط 3 تابع را به یک ژنراتور تبدیل می کند. بدنه پاسخ به عنوان یک رشته بایت قابل تکرار برگردانده می شود.

### نمونه ای از صدا زدن یک اپلیکیشن

یک مثال کامل از سرور شبکه WSGI خارج از حوصله این مقاله است. در زیر طرحی از چگونگی فراخوانی برنامه WSGI و بازیابی خط وضعیت HTTP ، هدرهای پاسخ و بدنه پاسخ آن به عنوان اشیا پایتون آورده شده است. جزئیات مربوط به نحوه ساخت دیکشنری environ حذف شده است.

```
from io import BytesIO

def call\_application(app, environ):
    status = None
    headers = None
    body = BytesIO()
    
    def start\_response(rstatus, rheaders):
        nonlocal status, headers
        status, headers = rstatus, rheaders
        
    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 پشتیبانی می کنند:

* bjoern
* BlueBream
* bobo
* Bottle
* CherryPy
* Django
* Eventlet
* Flask
* Falcon (web framework)
* Gevent-FastCGI
* Google App Engine's webapp2
* Gunicorn
* prestans
* mod\_wsgi for use with Apache
* netius
* pycnic
* Paste component WebOb is specifically a WSGI extension. It was adopted by the Pylons project.
* Pylons
* Pyramid
* restlite
* Tornado
* Trac
* TurboGears
* Uliweb
* uWSGI
* Waitress
* web.py
* web2py
* weblayer
* Werkzeug
* Radicale

پوشه های فعلی برای FastCGI ، CGI ، SCGI ، AJP (با استفاده از flup) ، twisted.web ، Apache (با استفاده از mod \_ wsgi یا mod \_ python) ، Nginx (با استفاده از ngx \_ http \_ uwsgi \_ module) و Microsoft IIS (با استفاده از WFastCGI ، [27] isapi - wsgi ، [28] PyISAPIe ، [29] یا درگاه ASP) در دسترس هستند.

جستارهای وابسته
---------------

* واسط دروازه مشترک
* واسط دروازه مشترک سریع
* میان‌افزار

پانویس
------

1. ~~Bassi, *Python for Bioinformatics*, 548.~~

منابع
-----

* Bassi, S. (2009). *Python for Bioinformatics*. Chapman & Hall/CRC Mathematical and Computational Biology (به انگلیسی). CRC Press. Retrieved 2015-04-01.

| * ن
* ب
* و
رابط‌های وب |
| --- |
| سمت سرور | 

|  |  |
| --- | --- |
| پروتکلها | 
* HTTP
* CGI
* SCGI
* FCGI
* AJP
* WSRP
* وب‌سوکت

 |
| رابط برنامه‌نویسی وب | 
* C NSAPI
* C ASAPI
* C ISAPI
* COM ASP
* جاوا سرولت
	+ container
* CLI OWIN
* ASP.NET Handler
* Python WSGI
* Ruby Rack
* JavaScript JSGI
* Perl PSGI
* Lua WSAPI
* Portlet

 |
| Apache modules | 
* mod\_jk
* mod\_lisp
* mod\_mono
* mod\_parrot
* mod\_perl
* mod\_php
* mod\_proxy
* mod\_python
* mod\_wsgi
* mod\_ruby
* Phusion Passenger

 |
| موضوعات | 
* منبع وب در برابر خدمات وب
* Open API
* Webhook
* سرور کاربردی
	+ comparison
* اسکریپت‌نویسی

 |

 |
| سمت کاربر | 

|  |  |
| --- | --- |
| رابط‌های مرورگر | 
* C NPAPI
	+ LiveConnect
	+ XPConnect
* C NPRuntime
* C PPAPI
	+ NaCl
* اکتیوایکس
* BHO
* XBAP

 |
| رابطه برنامه‌نویسی وب | 

|  |  |
| --- | --- |
| W3C | 
* Audio
* کانواس
* CORS
* DOM
* DOM events
* EME
* File
* Geolocation
* IndexedDB
* MSE
* SSE
* SVG
* Video
* وب‌آرتی‌سی
* وب‌سوکت
* Web Messaging
* Web storage
* Web worker
* XMLHttpRequest
* وب‌اسمبلی

 |
| Khronos | 
* WebCL
* وب‌جی‌ال

 |
| دیگر | 
* Gears
* Web SQL Database (پیشتر با نام W3C)
* WebUSB

 |

 |
| موضوعات | 
* ایجکس در برابر اچ‌تی‌ام‌ال پویا
* Mashup
* Web IDL
* اسکریپت‌نویسی

 |

 |
| شرکتهای خدمات وب | 
* بهسازان هاست

 |
| موضوعات | 
* صفحه وب پویا
* Open Web Platform
* برنامه‌های غنی اینترنتی
* برنامه کاربردی وب

 |

| * ن
* ب
* و
پایتون |
| --- |
| پیاده‌سازی‌ها و گویش‌ها | 
* CircuitPython
* CLPython
* سی‌پایتون
* سایتون
* MicroPython
* نامبا
* آیرون پایتون
* جایتون
* Psyco
* پای‌پای
* Python for S60
* Shed Skin
* Stackless Python
* *more...*

 |  |
| محیط یکپارچه توسعه نرم‌افزار و ویرایشگرها | 
* مقایسه محیط‌های یکپارچه توسعه نرم‌افزار
* اریک (نرم‌افزار)
* آی‌دی‌ال‌ئی (پایتون)
* پای‌چارم
* پای‌دو
* Ninja-IDE
* جینی
* مونودولاپ
* اکلیپس
* اسپایدر
* پای‌چارم
* *مقایسه محیط‌های یکپارچه توسعه نرم‌افزار...*

 |
| کتابخانه‌ها | 
* پای‌کیوت
* پای‌جی‌تی‌کی
* تکینتر

 |
| کتابخانه‌های علمی | 
* کتابخانه مت‌پلات
* نام‌پای
* پانداس (نرم‌افزار)
* سای‌پای
* سای‌کیت

 |
| فریم‌ورک‌های وب پایتون | 
* جنگو
* CherryPy
* فلسک

 |
| موضوعات | 
* واسط دروازه کارساز وب

 |
| 
* software (list)
* Python Software Foundation
* PyCon
* **رده:پایتون (زبان برنامه‌نویسی)**

 |

|  |  |
| --- | --- |
| آیکون خرد | این یک مقالهٔ خرد برنامه‌نویسی کامپیوتری است. می‌توانید با گسترش آن به ویکی‌پدیا کمک کنید. |