Интерфейс шлюза веб-сервера

редактировать
Соглашение о вызовах для веб-серверов для пересылки запросов на веб-приложения, написанные на Python
Содержание
  • 1 Предпосылки
  • 2 Обзор спецификации
  • 3 Промежуточное ПО WSGI
  • 4 Примеры
    • 4.1 Пример приложения
    • 4.2 Пример вызова приложения
  • 5 WSGI-совместимые приложения и платформы
  • 6 См. Также
  • 7 Ссылки
  • 8 Внешние ссылки

Интерфейс шлюза веб-сервера (WSGI, произносится как виски или ) - это простое соглашение о вызовах для веб-серверов для пересылки запросов в веб-приложения или фреймворки, написанные на языке программирования Python. Текущая версия WSGI, версия 1.0.1, указана в Python Enhancement Proposal (PEP) 3333.

WSGI изначально был указан как PEP-333 в 2003 году. PEP-3333, опубликовано в 2010 обновлена ​​спецификация для Python 3.

Background

В 2003 году веб-фреймворки Python обычно писались только для CGI, FastCGI, mod_python или какой-либо другой настраиваемый API определенного веб-сервера. Процитируем PEP 333:

Python в настоящее время может похвастаться широким спектром фреймворков веб-приложений, таких как Zope, Quixote, Webware, SkunkWeb, PSO и Twisted Web - и это лишь некоторые из них. Этот широкий выбор может быть проблемой для новых пользователей Python, потому что, вообще говоря, их выбор веб-фреймворка ограничивает их выбор используемых веб-серверов, и наоборот... В отличие от этого, хотя Java имеет столько же фреймворков веб-приложений доступный, API сервлетов Java позволяет приложениям, написанным на любой структуре веб-приложений Java, работать на любом веб-сервере, поддерживающем API сервлетов.

Таким образом, WSGI был создан как не зависящий от реализации интерфейс между веб-серверами и веб-приложениями или фреймворками для продвижения общей основы для портативных разработки веб-приложений.

Обзор спецификаций

WSGI имеет две стороны:

  • сервер / сторона шлюза. Часто на нем выполняется полное программное обеспечение веб-сервера, такое как Apache или Nginx, или это легкий сервер приложений, который может взаимодействовать с веб-сервером, например flup.
  • приложение / сторона каркаса. Это вызываемый Python, предоставляемый программой или фреймворком Python.

Между сервером и приложением может быть один или несколько компонентов промежуточного программного обеспечения WSGI , которые реализуют обе стороны API, обычно в Код Python.

WSGI не указывает, как следует запускать интерпретатор Python, а также как объект приложения должен быть загружен или настроен, и разные платформы и веб-серверы достигают этого по-разному.

Промежуточное ПО WSGI

Компонент промежуточного ПО WSGI - это вызываемый Python, который сам является приложением WSGI, но может обрабатывать запросы, делегируя другим приложениям WSGI. Эти приложения могут сами быть компонентами промежуточного программного обеспечения WSGI.

Компонент промежуточного программного обеспечения может выполнять такие функции, как:

  • Маршрутизация запроса к различным объектам приложения на основе целевого URL-адреса после изменения переменные среды соответственно.
  • Разрешение одновременной работы нескольких приложений или платформ в одном и том же процессе
  • Балансировка нагрузки и удаленная обработка путем пересылки запросов и ответы по сети
  • Выполнение постобработки контента, например, применение XSLT таблиц стилей
Примеры

Пример приложения

WSGI-совместимый " Hello, World "приложение, написанное на Python :

1 def application (environment, start_response): 2 start_response ('200 OK', [('Content-Type', 'text / plain')]) 3 yield b'Hello, World \ n '

Где:

  • Строка 1 определяет функцию с именем application, которая принимает два параметра: Environmentи start_response. Environment- это словарь, содержащий переменные среды CGI, а также другие параметры запроса и метаданные с четко определенными ключами. start_response- это сам вызываемый объект, принимающий два позиционных параметра, statusи response_headers.
  • Строка 2 вызывает start_response, указывая «200 OK» в качестве статуса HTTP и заголовка ответа «Content-Type».
  • Строка 3 превращает функцию в генератор . Тело ответа возвращается как итерация из байтовых строк.

Пример вызова приложения

Полный пример сетевого сервера WSGI выходит за рамки этой статьи. Ниже приведен эскиз того, как можно вызвать приложение WSGI и получить его строку состояния HTTP, заголовки ответа и тело ответа в виде объектов Python. Подробности создания словаря environmentбыли опущены.

из io import BytesIO def call_application (app, environment): status = None headers = None body = BytesIO () def start_response (rstatus, rheaders): нелокальный статус, статус заголовков, headers = rstatus, rheaders app_iter = app (environment, start_response) try: для данных в app_iter: статус assert не равен None, а заголовки не None, \ "start_response () не был вызван" body.write (data) наконец: if hasattr (app_iter, 'close'): app_iter. close () возвращают статус, заголовки, body.getvalue () environment = {...} # "environment" dict status, headers, body = call_application (app, environment)
WSGI-совместимые приложения и фреймворки

Многочисленные веб-фреймворки поддерживают WSGI:

В настоящее время оболочки доступны для FastCGI, CGI, SCGI, AJP (с использованием flup), twisted.web, Apache (с использованием mod_wsgi или mod_python ), Nginx (с использованием ngx_http_uwsgi_module), и Microsoft IIS (с использованием WFastCGI, isapi-wsgi, PyISAPIe или шлюза ASP ).

См. Также
  • - Духовный преемник WSGI, добавляющий поддержку асинхронных приложений
  • Rack - Ruby интерфейс веб-сервера
  • PSGI - Perl Интерфейс шлюза веб-сервера
  • SCGI - Простой общий интерфейс шлюза
  • JSGI - JavaScript интерфейс шлюза веб-сервера
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-20 10:28:35
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте