WSGI () — стандарт обмена данными между веб-сервером и веб-приложением, написанным на Python, описанный в документе PEP 333.
История WSGI придумал создатель фреймворка Pylons Бен Бангерт (), известный под псевдонимом Groovie.
В 2003 году была опубликована спецификация PEP 333.
В 2010 году вышла спецификация PEP 3333.
Идея
В Python существует большое количество различного рода веб-фреймворков (каркасов), тулкитов и библиотек. Для каждого из них — собственный метод установки и настройки, они не умеют взаимодействовать между собой. Это может стать затруднением для тех, кто только начинает изучать Python, так как, например, выбор определённого фреймворка может ограничить выбор веб-сервера, и наоборот.
WSGI предоставляет простой и универсальный интерфейс между большинством веб-серверов и веб-приложениями или фреймворками.
Спецификации
По стандарту, WSGI-приложение должно удовлетворять следующим требованиям: должно быть вызываемым (callable) объектом (обычно это функция или метод) принимать два параметра: словарь переменных окружения (environ) обработчик запроса (start_response) вызывать обработчик запроса с кодом HTTP-ответа и HTTP-заголовками возвращать итерируемый объект с телом ответа
Простейшим примером WSGI-приложения может служить такая функция-генератор: def application(environ, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) yield b'Hello, World!\n'
Middleware
Помимо приложений и серверов, стандарт дает определение middleware-компонентов, предоставляющих интерфейсы как приложению, так и серверу. То есть для сервера middleware является приложением, а для приложения — сервером. Это позволяет составлять «цепочки» WSGI-совместимых middleware. Middleware — простая обертка над объектом приложения, реализовать её можно через замыкание.
Middleware могут брать на себя следующие функции (но не ограничиваются этим):
обработка сессий аутентификация/авторизация управление URL (маршрутизация запросов) балансировка нагрузки пост-обработка выходных данных (например, проверка на валидность) изменение заголовков
См. также ASGI — духовный наследник WSGI, добавляющий поддержку асинхронных приложений
Примечания
Литература
Документация
Ссылки PEP 3333 — Python Enhancement Proposal, определяющий стандарт интерфейса wsgi.org — крупнейшая вики об WSGI
Категория:Python Категория:Статьи с примерами кода Python Категория:Стандарты