Интерфейс шлюза веб-сервера
Интерфейс шлюза веб-сервера ( WSGI , произносится как виски) . [ 1 ] [ 2 ] или WIZ -ги [ 3 ] ) — это простое соглашение о вызовах для веб-серверов пересылки запросов веб-приложениям или платформам, написанным на языке программирования Python . Текущая версия WSGI, версия 1.0.1, указана в предложении по расширению Python (PEP) 3333. [ 4 ]
Первоначально WSGI был указан как PEP-333 в 2003 году. [ 5 ] PEP-3333, опубликованный в 2010 году, обновляет спецификацию Python 3 .
Фон
[ редактировать ]Python В 2003 году веб-фреймворки обычно писались только с использованием CGI , FastCGI , mod_python или какого-либо другого пользовательского API конкретного веб-сервера . [ 6 ] Цитируем PEP 333:
В настоящее время Python может похвастаться широким разнообразием фреймворков веб-приложений, таких как Zope, Quixote, Webware, SkunkWeb, PSO и Twisted Web — и это лишь некоторые из них. Такое широкое разнообразие вариантов может стать проблемой для новых пользователей Python, потому что, вообще говоря, их выбор веб-фреймворка будет ограничивать их выбор пригодных для использования веб-серверов, и наоборот... Напротив, хотя Java имеет столько же фреймворков веб-приложений. Доступный API-интерфейс «сервлетов» Java позволяет приложениям, написанным с использованием любой платформы веб-приложений Java, запускаться на любом веб-сервере, поддерживающем API сервлетов.
Таким образом, WSGI был создан как независимый от реализации интерфейс между веб-серверами и веб-приложениями или платформами, чтобы обеспечить общую основу для разработки портативных веб-приложений. [ 4 ]
Обзор спецификаций
[ редактировать ]У WSGI есть две стороны:
- сторона сервера / шлюза . Часто это полнофункциональное программное обеспечение веб-сервера, такое как Apache или Nginx , или легкий сервер приложений, который может взаимодействовать с веб-сервером, например flup .
- сторона приложения/фреймворка. Это вызываемый объект Python, предоставляемый программой или платформой Python.
Между сервером и приложением может быть один или несколько WSGI компонентов промежуточного программного обеспечения , которые реализуют обе стороны API, обычно в коде Python.
WSGI не определяет, как следует запускать интерпретатор Python, а также как следует загружать или настраивать объект приложения, а разные платформы и веб-серверы достигают этого по-разному.
Промежуточное ПО WSGI
[ редактировать ]Компонент промежуточного программного обеспечения WSGI — это вызываемый объект Python, который сам по себе является приложением WSGI, но может обрабатывать запросы, делегируя их другим приложениям WSGI. Эти приложения сами могут быть компонентами промежуточного программного обеспечения WSGI. [ 7 ]
Компонент промежуточного программного обеспечения может выполнять такие функции, как: [ 7 ]
- Маршрутизация запроса к различным объектам приложения на основе целевого URL-адреса после соответствующего изменения переменных среды .
- Разрешение одновременной работы нескольких приложений или платформ в одном процессе.
- Балансировка нагрузки и удаленная обработка путем пересылки запросов и ответов по сети.
- Выполнение постобработки контента, например применение XSLT . таблиц стилей
Примеры
[ редактировать ]Пример приложения
[ редактировать ]WSGI-совместимое приложение « Hello, World! », написанное на Python :
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 , а также другие параметры запроса и метаданные под четко определенными ключами. [ 9 ]start_response
сам является вызываемым объектом, принимающим два позиционных параметра,status
иresponse_headers
. - Звонки по линии 2
start_response
, указав «200 OK» в качестве статуса HTTP и заголовок ответа «Content-Type». - Строка 3 превращает функцию в генератор . Тело ответа возвращается в виде итерации байтовых строк .
Пример вызова приложения
[ редактировать ]Полный пример сетевого сервера WSGI выходит за рамки этой статьи. Ниже приведен эскиз того, как можно вызвать приложение WSGI и получить его строку состояния HTTP, заголовки ответа и тело ответа в виде объектов Python. [ 10 ] Подробности о том, как построить environ
dict были опущены.
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:
- Бьерн
- Голубец
- бобо [ 11 ]
- Бутылка
- ЧерриПи
- Джанго [ 12 ]
- Ивентлет [ 13 ]
- ФастWSGI
- Колба
- Сокол (веб-фреймворк) [ 14 ]
- Gevent-FastCGI [ 15 ]
- Google App Engine Webapp2
- Единорог
- появление [ 16 ]
- mod_wsgi для использования с Apache [ 17 ]
- нетиус
- пикник [ 18 ]
- Компонент вставки WebOb является расширением WSGI. Он был принят в проекте Pylons .
- Пилоны
- Пирамида
- отдых [ 19 ]
- Торнадо
- Трак
- ТурбоГирс
- Уливеб [ 20 ]
- uWSGI
- Официантка [ 21 ]
- web.py [ 22 ]
- веб2py
- веб-слой [ 23 ]
- Инструмент [ 24 ]
- Радикальный [ 25 ]
В настоящее время доступны оболочки для FastCGI , CGI , SCGI , AJP (с использованием flup), wwisted.web , Apache (с использованием mod_wsgi или mod_python ), Nginx (с использованием ngx_http_uwsgi_module), [ 26 ] Nginx Unit (с использованием языкового модуля Python), [ 27 ] и Microsoft IIS (с использованием WFastCGI, [ 28 ] Исапи-WSGI, [ 29 ] PyISAPIe, [ 30 ] или шлюз ASP ).
См. также
[ редактировать ]- Интерфейс асинхронного серверного шлюза (ASGI) — духовный преемник WSGI, добавляющий поддержку асинхронных приложений.
- Rack — Ruby . интерфейс веб-сервера
- PSGI — Perl интерфейс шлюза веб-сервера
- SCGI – простой интерфейс общего шлюза
- JSGI — JavaScript. интерфейс шлюза веб-сервера
Ссылки
[ редактировать ]- ^ Симионато, Микеле (11 июня 2007 г.). «Введение в веб-программирование с помощью WSGI» .
- ^ Эдж, Джейк (9 июля 2019 г.). «Вознялся с микрофреймворками» . ЛВН .
- ^ Голдберг, Кевин (9 мая 2016 г.). «Введение в серверы Python WSGI для повышения производительности | AppDynamics» . Блог о мониторинге производительности приложений | AppDynamics . Проверено 20 августа 2020 г.
- ^ Jump up to: а б «PEP 3333 — Интерфейс шлюза веб-сервера Python v1.0.1» . Python.org . Проверено 4 апреля 2018 г.
- ^ «PEP 333 — Интерфейс шлюза веб-сервера Python v1.0» . Python.org . Проверено 4 апреля 2018 г.
- ^ «FrontPage — Python Wiki» . Python.org . Проверено 27 января 2017 г.
- ^ Jump up to: а б «PEP 3333 — Интерфейс шлюза веб-сервера Python v1.0.1» . Python.org . Проверено 4 апреля 2018 г.
- ^ т.е. «функция, метод, класс или экземпляр с
__call__
метод" - ^ «PEP 3333 — Интерфейс шлюза веб-сервера Python v1.0.1» . Python.org . Проверено 4 апреля 2018 г.
- ^ «Создание промежуточного программного обеспечения WSGI — Алан Кристофер Томас — Minted — PythonKC» . Ютуб . 28 августа 2015 г. Архивировано из оригинала 12 декабря 2021 г. Проверено 27 января 2017 г.
- ^ эффект » Пуэрария « Каков ? геля
- ^ «Django без mod_python и поддержки WSGI | Блог | Django» . Джангопроект.com . 18 июля 2005 г. Проверено 27 января 2017 г.
- ^ «wsgi — сервер WSGI — документация Eventlet 0.20.1» . Eventlet.net . Проверено 27 января 2017 г.
- ^ «Falcon — базовая платформа веб-API для Python» . Проверено 22 октября 2017 г.
- ^ «gevent-fastcgi 1.0.2.1: Индекс пакетов Python» . Pypi.python.org . 06.12.2015 . Проверено 27 января 2017 г.
- ^ «аномалия/престанс: микроплатформа REST, совместимая с WSGI» . GitHub.com . Проверено 27 января 2017 г.
- ^ «Архив кода Google — долгосрочное хранилище для хостинга проектов Google Code» . Code.google.com . Проверено 27 января 2017 г.
- ^ «Рамка Пикника» . Pycnic.nullism.com . Проверено 27 января 2017 г.
- ^ «theintencity/restlite: легкие серверные инструменты RESTful на Python» . GitHub.com . Проверено 27 января 2017 г.
- ^ «limodou/uliweb: простая и удобная веб-инфраструктура Python» . GitHub.com . Проверено 27 января 2017 г.
- ^ «документация официантки» . docs.pylonsproject.org . Проверено 26 сентября 2018 г.
- ^ «Добро пожаловать в» . Веб.py. 11 сентября 2009 г. Проверено 27 января 2017 г.
- ^ «weblayer — документация по веб-плееру v0.4.3» . Packages.python.org . Проверено 27 января 2017 г.
- ^ «Добро пожаловать | Werkzeug (Библиотека утилит Python WSGI)» . Werkzeug.pocoo.org . Проверено 27 января 2017 г.
- ^ «Сервер CalDAV и CardDAV — простой сервер календаря и контактов» . Радикале.орг . Проверено 27 января 2017 г.
- ^ «Модуль ngx_http_uwsgi_module» . Nginx.org . Проверено 27 января 2017 г.
- ^ «Конфигурация — Модуль NGINX» . Unit.nginx.org . Проверено 4 мая 2023 г.
- ^ «Инструменты Python для Visual Studio — Документация» . Pytools.codeplex.com . Проверено 27 января 2017 г.
- ^ «Архив кода Google — долгосрочное хранилище для хостинга проектов Google Code» . Code.google.com . Проверено 27 января 2017 г.
- ^ «Расширение Python ISAPI для загрузки IIS | SourceForge.net» . Pyisapie.sourceforge.net . 24 апреля 2012 г. Проверено 27 января 2017 г.
Внешние ссылки
[ редактировать ]- PEP 333 — интерфейс шлюза веб-сервера Python
- PEP 3333 — интерфейс шлюза веб-сервера Python v1.0.1
- Метафреймворк WSGI
- Комплексная вики обо всем WSGI
- Учебное пособие по WSGI
- Модуль стандартной библиотеки Python wsgiref
- Начало работы с WSGI
- NWSGI — реализация .NET спецификации Python WSGI для IronPython и IIS.
- Сервер Gevent-FastCGI, реализованный с использованием сетевой библиотеки на основе сопрограмм gevent.