Что такое WSGI и каково его назначение в Python?

Ответ

WSGI (Web Server Gateway Interface) — это стандартный интерфейс, который определяет, как веб-сервер взаимодействует с веб-приложениями, написанными на Python. Он обеспечивает унифицированный способ передачи HTTP-запросов от сервера к приложению.

Ключевые задачи, которые решает WSGI:

  • Портативность: Приложение, написанное с соблюдением стандарта WSGI, может работать с любым WSGI-совместимым сервером (Gunicorn, uWSGI, mod_wsgi) без изменений в коде.
  • Разделение ответственности: Веб-сервер (например, Nginx) отвечает за обработку сетевых соединений, а WSGI-сервер — за управление процессами Python и передачу им запросов.
  • Простота: Стандарт определяет простой callable объект (функцию или класс) в качестве точки входа в приложение.

Схема работы: Клиент <-> Веб-сервер (Nginx) <-> WSGI-сервер (Gunicorn) <-> Python-приложение (Django, Flask)

Пример минимального WSGI-приложения:

# Это приложение может быть запущено любым WSGI-сервером
def application(environ, start_response):
    # environ: словарь с переменными запроса
    # start_response: функция для отправки HTTP-статуса и заголовков
    status = '200 OK'
    headers = [('Content-Type', 'text/plain')]
    start_response(status, headers)
    return [b'Hello, WSGI!']

Современным асинхронным преемником WSGI является ASGI (Asynchronous Server Gateway Interface), предназначенный для работы с asyncio.