Введение

Интерфейс шлюза веб-сервера (WSGI, произносится как «виски» или «визги») — это простой протокол взаимодействия для веб-серверов, позволяющий перенаправлять запросы веб-приложениям или фреймворкам, написанным на языке программирования Python. Текущая версия WSGI, 1.0.1, описана в предложении по улучшению Python (PEP) 3333. Изначально WSGI был описан как PEP 333 в 2003 году. PEP 3333, опубликованный в 2010 году, обновляет спецификацию для 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 преобразует функцию в генератор. Тело ответа возвращается в виде итерируемого объекта, состоящего из байтовых строк.