WSGI

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

WSGI (англ. Web Server Gateway Interface, вимовляється віскі або візґі[1]) — стандарт взаємодії між 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 можуть брати на себе такі функції (однак не обмежуються наведеним):

Сумісні з WSGI[ред. | ред. код]

Вебзастосунки[ред. | ред. код]

  • Trac — трекер, вікі, управління проєктами
  • MoinMoin — вікі
  • Roundup — трекер

Вебфреймворки і сервери застосунків[ред. | ред. код]

Зноски[ред. | ред. код]

  1. записано на слух на PyCon Ukraine 2011

Посилання[ред. | ред. код]