Що таке WSGI та CGI у звичайній англійській мові?


127

Кожен раз, коли я читаю або WSGI, або CGI, я стискаюся. Я раніше спробував її прочитати, але насправді нічого не застрягло.

Що це насправді в звичайній англійській мові?

Це просто передає запити в термінал і перенаправляє вихід?


Відповіді:


60

WSGI запускає інтерпретатор Python на старті веб-сервера, або як частина процесу веб-сервера (вбудований режим), або як окремий процес (режим демон), і завантажує в нього сценарій. Кожен запит призводить до виклику певної функції в скрипті, при цьому середовище запиту передається як аргументи функції.

CGI запускає скрипт як окремий процес кожного запиту і використовує змінні середовища, stdin та stdout для "спілкування" з ним.


15
WSGI! = Mod_wsgi. Ваша мова підказує, що ви маєте на увазі mod_wsgi, що є реалізацією WSGI. Сам WSGI - це лише специфікація і може бути реалізований різними способами, в тому числі поверх CGI.
Грем Дамплтон

@Graham: Ви хочете сказати, що немає інших контейнерів WSGI, які підтримують запущені програми WSGI в цих режимах?
Ігнасіо Васкес-Абрамс

3
Технічно можна сказати, що є більш тонкі варіанти, ніж лише ці два, принаймні настільки, наскільки те, як починаються процеси або як активується код у вбудованій системі. Тож треба бути обережним у загальному узагальненні речей лише на ці дві категорії. На грубому рівні ви можете сказати, що у вас є, але це є дещо більше, ніж це, якщо ви хочете заглибитись у це.
Грем Дамплтон,

1
@GrahamDumpleton, з цікавості, ви б не подумали пояснити, як WSGI можна впровадити на додаток до CGI?
Йоланд

2
Прочитайте специфікацію WSGI. Він показує приклад моста CGI / WSGI. python.org/dev/peps/pep-3333/#the-server-gateway-side Для більш надійної реалізації див. github.com/GrahamDumpleton/cgi2wsgi Серйозно, хоча б ти загалом хотів би уникнути CGI.
Грем Дамплтон,

256

З точки зору повністю відступаючої, Blankman, ось моя "сторінка вступу" для інтерфейсу шлюзу веб-служб:

Частина перша: веб-сервери

Веб-сервери подають відповіді. Вони сидять навколо, терпляче чекаючи, а потім раптом, не попереджуючи зовсім:

  • клієнтський процес надсилає запит. Клієнтський процес може бути веб-сервером, ботом, мобільним додатком, будь-яким іншим. Це просто "клієнт"
  • веб-сервер отримує цей запит
  • свідомо бурмочувати різні речі (див. нижче)
  • Веб-сервер щось надсилає клієнту
  • веб-сервер знову сидить навколо

Веб-сервери (принаймні, кращі) в цьому дуже ДУЖЕ хороші. Вони масштабують обробку вгору та вниз, залежно від попиту, вони надійно ведуть розмови з найвибагливішими клієнтами по-справжньому крутих мережах, і нам ніколи насправді не потрібно про це турбуватися. Вони просто продовжують служити.

Це моя думка: веб-сервери - це саме це: сервери. Вони нічого не знають про вміст, нічого про користувачів, насправді нічого, крім того, як багато чекати і надійно відповідати.

Вибір веб-сервера повинен відображати вашу перевагу доставки, а не програмне забезпечення. Ваш веб-сервер повинен відповідати за обслуговування, а не обробку чи логічні речі.

Частина друга: (ПІТОН) ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ

Програмне забезпечення не сидить навколо. Програмне забезпечення існує лише під час виконання. Програмне забезпечення не дуже пристосоване, якщо мова йде про несподівані зміни в оточенні (файли не там, де він очікує, параметри перейменовані тощо). Хоча оптимізація має бути центральним принципом вашого дизайну (звичайно), саме програмне забезпечення не оптимізується. Розробники оптимізують. Програмне забезпечення виконує. Програмне забезпечення виконує всі речі в розділі "навмисне бурмотіння" вище. Може бути що завгодно.

Ваш вибір або дизайн програмного забезпечення повинен відображати вашу програму, ваш вибір функціональності, а не ваш вибір веб-сервера.

Саме тут традиційний метод "компіляції" мов на веб-сервери стає болючим. У кінцевому підсумку ви додаєте код у свою програму, щоб впоратися з фізичним середовищем сервера або, принаймні, змушений вибрати відповідну бібліотеку "обгортки", яку потрібно включити під час виконання, щоб створити ілюзію рівномірності між веб-серверами.

ТАКІ ШТО WSGI?

Отже, нарешті, що таке WSGI? WSGI - це сукупність правил , написаних у дві половини. Вони написані таким чином, що їх можна інтегрувати в будь-яке середовище, яке вітає інтеграцію.

У першій частині, написаній на стороні веб-сервера, написано: "Добре, якщо ви хочете мати справу з додатком WSGI, ось як програмне забезпечення буде думати при завантаженні. Ось, що потрібно зробити доступним для програми, і тут це інтерфейс (макет), на який ви можете очікувати наявності кожної програми. Більше того, якщо щось піде не так, ось як буде думати додаток і як ви можете очікувати, що він буде вести себе ".

Друга частина, написана для прикладного програмного забезпечення Python, говорить: «Добре, якщо ви хочете мати справу з сервером WSGI, ось як сервер буде думати, коли він зв’яжеться з вами. Ось що потрібно зробити доступним для сервера, і ось інтерфейс (макет), від якого можна очікувати, що кожен сервер матиме. Більше того, якщо щось піде не так, ось як ви повинні вести себе, і ось що ви повинні сказати серверу ".

Отож, у вас це є - сервери будуть серверами, а програмне забезпечення буде програмним забезпеченням, і ось такий спосіб вони можуть добре уживатися, не потребуючи жодних дозволів на особливості іншого. Це WSGI.

mod_wsgi, з іншого боку, є плагіном для Apache, який дозволяє йому спілкуватися з програмним забезпеченням, сумісним з WSGI, іншими словами, mod_wsgi - це реалізація - в Apache - правил першої частини правила вище.

Що стосується CGI .... запитайте когось іншого :-)


21
Замість того, щоб дозволити цю відповідь закінчуватись "запитати когось іншого", я б хотів, щоб хтось змінив цю відповідь, щоб вона включала CGI таким же чином.
Бруно Броноський

1
"сервери будуть серверами, а програмне забезпечення буде програмним забезпеченням" - "сервери з Марса, а програмне забезпечення - від Венери" :)
Рахул

22

Якщо вам не зрозуміло всі терміни в цьому просторі, і давайте поглянемо на це, це заплутане абревіатура, також є хороший фоновий читач у формі офіційного пітона HOWTO, який обговорює CGI проти FastCGI проти WSGI і так далі на. Я б хотів, щоб я прочитав її спочатку.


21

І CGI, і WSGI визначають стандартні інтерфейси, які програми можуть використовувати для обробки веб-запитів. Інтерфейс CGI знаходиться на нижчому рівні, ніж WSGI, і включає сервер, який налаштовує змінні середовища, що містять дані з HTTP-запиту, при цьому програма повертає щось відформатоване майже як голий відповідь сервера HTTP.

З іншого боку, WSGI - це специфічний для Python інтерфейс дещо вищого рівня, який дозволяє програмістам писати програми, які є агностичними для сервера та які можна зафіксувати в інших програмах WSGI (середнє програмне забезпечення).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.