Введение
Интерфейс шлюза веб-сервера (WSGI, произносится как «виски» или «визги») — это простой протокол взаимодействия для веб-серверов, позволяющий перенаправлять запросы веб-приложениям или фреймворкам, написанным на языке программирования Python. Текущая версия WSGI, 1.0.1, описана в предложении по улучшению Python (PEP) 3333. Изначально WSGI был описан как PEP 333 в 2003 году. PEP 3333, опубликованный в 2010 году, обновляет спецификацию для Python 3.
The Web Server Gateway Interface (WSGI, pronounced whiskey or WIZghee) is a simple calling convention for web servers to forward requests to web applications or frameworks written in the Python programming language. The current version of WSGI, version 1.0.1, is specified in Python Enhancement Proposal (PEP) 3333. WSGI was originally specified as PEP 333 in 2003. PEP 3333, published in 2010, updates the specification for Python 3.
Предыстория
В 2003 году веб-фреймворки Python обычно разрабатывались для работы только с CGI, FastCGI, mod_python или каким-либо другим специализированным API конкретного веб-сервера. Как указано в PEP 333:
Python в настоящее время предлагает большое разнообразие веб-фреймворков, таких как Zope, Quixote, Webware, SkunkWeb, PSO и Twisted Web, и это лишь некоторые из них. Такое обилие выбора может быть проблемой для начинающих пользователей Python, поскольку, как правило, выбор веб-фреймворка ограничивает выбор совместимых веб-серверов, и наоборот. В отличие от этого, хотя в Java доступно не меньше веб-фреймворков, API "сервлетов" Java позволяет приложениям, написанным на любом Java веб-фреймворке, работать на любом веб-сервере, поддерживающем этот API. Таким образом, WSGI был создан как нейтральный к реализации интерфейс между веб-серверами и веб-приложениями или фреймворками, чтобы обеспечить общую основу для разработки переносимых веб-приложений. Компонент промежуточного ПО может выполнять такие функции, как: именованное приложение, которое принимает два параметра: environ и start_response. Environ – это словарь, содержащий переменные окружения CGI, а также другие параметры запроса и метаданные, доступные по предопределенным ключам. Start_response – это вызываемый объект, принимающий два позиционных параметра: status и headers. В строке 2 вызывается start_response с указанием "200 OK" в качестве HTTP-статуса и заголовка ответа "Content-Type". Строка 3 преобразует функцию в генератор. Тело ответа возвращается в виде итерируемого объекта, состоящего из байтовых строк.