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>