WSGI (, вимовляється віскі або візґізаписано на слух на PyCon Ukraine 2011) — стандарт взаємодії між Python-програмою, яка виконується на стороні сервера, і самим вебсервером, наприклад, Apache.
Ідея
В Python існує велика кількість різного роду вебфреймворків, інструментаріїв і бібліотек. У кожного з них — власний метод встановлення та налаштування, вони часто написані так, що не можуть взаємодіяти між собою. Це може стати проблемою, бо вибір фреймворку може обмежити вибір вебсервера і навпаки.
WSGI надає простий і універсальний інтерфейс для взаємодії між більшістю вебсерверів і вебзастосунками чи фреймворками.
Специфікації
Відповідно до стандарту WSGI, вебзастосунок має задовольняти наступні вимоги:
має бути викличним (callable) об'єктом приймати два параметри: словник змінних оточення (environ) обробник запиту(start_response) викликати обробник запиту з кодом HTTP-відповіді та HTTP-заголовками повертати ітератор з тілом відповіді
Простим прикладом WSGI-застосунку може служити така функція: def simplest_wsgi_app(environ, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) return ['Hello, world!']
Тут як ітератор використовується список з одного елемента — рядка тексту 'Hello, world!'
Middleware
Окрім вебзастосунків і вебсерверів стандарт дає визначення middleware-компоненти. Middleware надає інтерфейси як серверу, так і вебзастосунку. Тобто для сервера middleware є вебзастосунком, а для застосунка — сервером. Це дозволяє утворювати «ланцюжки» WSGI-сумісних middleware.
Middleware можуть брати на себе такі функції (однак не обмежуються наведеним):
обробка сесій аутентифікація/авторизація управління URL (маршрутизація запитів) розподіл навантаження пост-обробка вихідних даних
Сумісні з WSGI
Вебзастосунки Trac — трекер, вікі, управління проєктами MoinMoin — вікі Roundup — трекер
Вебфреймворки і сервери застосунків Zope 3 Django Pylons TurboGears CherryPy mod wsgi Flask
Зноски
Посилання PEP 3333 - Нова версія стандарту інтерфейсу 1.01 PEP 333 — Python Enhancement Proposal, який визначає стандарт інтерфейсу (старий) Paste — Бібліотека WSGI-компонент http://wsgi.org/ — найбільша вікі присвячена WSGI