HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Бэкенд веб-приложения большую часть времени обрабатывает запросы от фронтенда. Ответная реакция на запрос зависит от того, какой<strong>адрес</strong>мы запросили и какой<strong>HTTP-глагол</strong>использовали.</p>
1 <p>Бэкенд веб-приложения большую часть времени обрабатывает запросы от фронтенда. Ответная реакция на запрос зависит от того, какой<strong>адрес</strong>мы запросили и какой<strong>HTTP-глагол</strong>использовали.</p>
2 <p>Чаще всего используются два глагола:</p>
2 <p>Чаще всего используются два глагола:</p>
3 <ul><li>POST-запрос</li>
3 <ul><li>POST-запрос</li>
4 <li>GET-запрос</li>
4 <li>GET-запрос</li>
5 </ul><p>Подробнее о глаголах протокола HTTP вы узнаете в соответствующем курсе. Пока мы просто уточним, что глагол - такая же часть запроса, как и URL в адресной строке браузера.</p>
5 </ul><p>Подробнее о глаголах протокола HTTP вы узнаете в соответствующем курсе. Пока мы просто уточним, что глагол - такая же часть запроса, как и URL в адресной строке браузера.</p>
6 <p>Практически в любом веб-приложении нужно:</p>
6 <p>Практически в любом веб-приложении нужно:</p>
7 <ol><li>Принять запрос</li>
7 <ol><li>Принять запрос</li>
8 <li>Определить, какой обработчик должен выполниться</li>
8 <li>Определить, какой обработчик должен выполниться</li>
9 <li>Выполнить обработчик и подготовить ответ</li>
9 <li>Выполнить обработчик и подготовить ответ</li>
10 <li>Вернуть ответ клиенту</li>
10 <li>Вернуть ответ клиенту</li>
11 </ol><p>Этот набор действий практически не меняется от проекта к проекту, поэтому его и выносят во фреймворк. В этом уроке мы разберемся, как работают микрофреймворки и для каких задач применяются.</p>
11 </ol><p>Этот набор действий практически не меняется от проекта к проекту, поэтому его и выносят во фреймворк. В этом уроке мы разберемся, как работают микрофреймворки и для каких задач применяются.</p>
12 <h2>Что такое фреймворк</h2>
12 <h2>Что такое фреймворк</h2>
13 <p>Типичный фреймворк работает в режиме "не звоните нам, мы сами вам позвоним":</p>
13 <p>Типичный фреймворк работает в режиме "не звоните нам, мы сами вам позвоним":</p>
14 <ul><li>Пользователь фреймворка встраивает свои функции в готовый каркас</li>
14 <ul><li>Пользователь фреймворка встраивает свои функции в готовый каркас</li>
15 <li>Фреймворк сам решает, когда и какие функции вызывать</li>
15 <li>Фреймворк сам решает, когда и какие функции вызывать</li>
16 </ul><p>Этим фреймворк отличается от обычной библиотеки - библиотеки обычно отдают контроль пользователю.</p>
16 </ul><p>Этим фреймворк отличается от обычной библиотеки - библиотеки обычно отдают контроль пользователю.</p>
17 <p>Давайте рассмотрим пример кода, построенного с использованием веб-фреймворка:</p>
17 <p>Давайте рассмотрим пример кода, построенного с использованием веб-фреймворка:</p>
18 <p>Эти пять строчек - готовое веб-приложение, пусть и содержащее всего один обработчик hello_world.</p>
18 <p>Эти пять строчек - готовое веб-приложение, пусть и содержащее всего один обработчик hello_world.</p>
19 <p>Обратите внимание, насколько код обработчика лаконичен: обработчик возвращает строку и вообще является максимально простой функцией. Вся магия скрыта в декораторе @app.route, который привязывает обработчик к конкретному пути.</p>
19 <p>Обратите внимание, насколько код обработчика лаконичен: обработчик возвращает строку и вообще является максимально простой функцией. Вся магия скрыта в декораторе @app.route, который привязывает обработчик к конкретному пути.</p>
20 - <p><strong>Путь</strong>- это часть адреа, идущая следом за доменным именем в HTTP-запросе. Возьмем для примера такой адрес:</p>
20 + <p><strong>Путь</strong>- это часть адреса, идущая следом за доменным именем в HTTP-запросе. Возьмем для примера такой адрес:</p>
21 <p>https://foo.bar/this/is/a/path</p>
21 <p>https://foo.bar/this/is/a/path</p>
22 <p>Найдем в нем путь:</p>
22 <p>Найдем в нем путь:</p>
23 <p>/this/is/a/path</p>
23 <p>/this/is/a/path</p>
24 <p>Вернемся к первому фрагменту:</p>
24 <p>Вернемся к первому фрагменту:</p>
25 <p>Здесь hello_world отвечает на запросы по пути '/'. Это так называемый<strong>корень</strong>- минимально возможный путь.</p>
25 <p>Здесь hello_world отвечает на запросы по пути '/'. Это так называемый<strong>корень</strong>- минимально возможный путь.</p>
26 <p>Например, в адресе https://hexlet.io/ завершающий слэш - тот самый<strong>корень сайта</strong>, то есть его главная страница.</p>
26 <p>Например, в адресе https://hexlet.io/ завершающий слэш - тот самый<strong>корень сайта</strong>, то есть его главная страница.</p>
27 <p>Рассмотренный пример демонстрирует использование<strong>микрофреймворка</strong>Flask. Приставка "микро-" обычно говорит, что фреймворк берет на себя только<strong>маршрутизацию</strong>- сопоставление путей с обработчиками. Иногда микрофреймворк включает в себя формирование простых ответов - скажем, текстовых ответов, как в примере выше.</p>
27 <p>Рассмотренный пример демонстрирует использование<strong>микрофреймворка</strong>Flask. Приставка "микро-" обычно говорит, что фреймворк берет на себя только<strong>маршрутизацию</strong>- сопоставление путей с обработчиками. Иногда микрофреймворк включает в себя формирование простых ответов - скажем, текстовых ответов, как в примере выше.</p>
28 <h2>Чем микрофреймворки отличаются от обычных</h2>
28 <h2>Чем микрофреймворки отличаются от обычных</h2>
29 <p>"Микроскопичность" часто связана еще и с тем, что реализованные с помощью микрофреймворков небольшие веб-приложения умещаются всего в один файл с кодом!</p>
29 <p>"Микроскопичность" часто связана еще и с тем, что реализованные с помощью микрофреймворков небольшие веб-приложения умещаются всего в один файл с кодом!</p>
30 <p>А вот Django и другие большие фреймворки уже требуют тщательного распределения кода по пакетам и модулям в соответствии со строгими правилами.</p>
30 <p>А вот Django и другие большие фреймворки уже требуют тщательного распределения кода по пакетам и модулям в соответствии со строгими правилами.</p>
31 <p>Скорее всего, к микрофреймворку вы будете со временем добавлять библиотеки с дополнительной функциональностью. При этом большой фреймворк обычно уже укомплектован кодом на все случаи жизни.</p>
31 <p>Скорее всего, к микрофреймворку вы будете со временем добавлять библиотеки с дополнительной функциональностью. При этом большой фреймворк обычно уже укомплектован кодом на все случаи жизни.</p>
32 <p>Такое разделение на "разумный минимум" и "все сразу и сразу по строгим правилам" сказывается на простоте изучения. С микрофреймворком сильно проще стартовать. Большие фреймворки можно будет освоить позже, когда вы освоитесь с основами веб-разработки и решите создать что-то большое и сложное.</p>
32 <p>Такое разделение на "разумный минимум" и "все сразу и сразу по строгим правилам" сказывается на простоте изучения. С микрофреймворком сильно проще стартовать. Большие фреймворки можно будет освоить позже, когда вы освоитесь с основами веб-разработки и решите создать что-то большое и сложное.</p>
33 <p>Вы могли бы подумать, что микрофреймворки - это нечто "игрушечное" или "учебное", но это не совсем верный вывод.</p>
33 <p>Вы могли бы подумать, что микрофреймворки - это нечто "игрушечное" или "учебное", но это не совсем верный вывод.</p>
34 <p>Микрофреймворки применяются в реальных проектах, в том числе и больших. Разница между большим фреймворком и микрофреймворком с дополнительными библиотеками может быть минимальна. Часто выбор вообще зависит от предпочтений разработчика.</p>
34 <p>Микрофреймворки применяются в реальных проектах, в том числе и больших. Разница между большим фреймворком и микрофреймворком с дополнительными библиотеками может быть минимальна. Часто выбор вообще зависит от предпочтений разработчика.</p>