Бэкенд веб-приложения большую часть времени обрабатывает запросы от фронтенда. Ответная реакция на запрос зависит от того, какой адрес мы запросили и какой HTTP-глагол использовали.
Чаще всего используются два глагола:
- POST-запрос
- GET-запрос
Подробнее о глаголах протокола HTTP вы узнаете в соответствующем курсе. Пока мы просто уточним, что глагол — такая же часть запроса, как и URL в адресной строке браузера.
Практически в любом веб-приложении нужно:
- Принять запрос
- Определить, какой обработчик должен выполниться
- Выполнить обработчик и подготовить ответ
- Вернуть ответ клиенту
Этот набор действий практически не меняется от проекта к проекту, поэтому его и выносят во фреймворк. В этом уроке мы разберемся, как работают микрофреймворки и для каких задач применяются.
Что такое фреймворк
Типичный фреймворк работает в режиме «не звоните нам, мы сами вам позвоним»:
- Пользователь фреймворка встраивает свои функции в готовый каркас
- Фреймворк сам решает, когда и какие функции вызывать
Этим фреймворк отличается от обычной библиотеки — библиотеки обычно отдают контроль пользователю.
Давайте рассмотрим пример кода, построенного с использованием веб-фреймворка:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
Эти пять строчек — готовое веб-приложение, пусть и содержащее всего один обработчик hello_world
.
Обратите внимание, насколько код обработчика лаконичен: обработчик возвращает строку и вообще является максимально простой функцией. Вся магия скрыта в декораторе @app.route
, который привязывает обработчик к конкретному пути.
Путь — это часть адреса, идущая следом за доменным именем в HTTP-запросе. Возьмем для примера такой адрес:
https://foo.bar/this/is/a/path
Найдем в нем путь:
/this/is/a/path
Вернемся к первому фрагменту:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
Здесь hello_world
отвечает на запросы по пути '/'
. Это так называемый корень — минимально возможный путь.
Например, в адресе https://hexlet.io/
завершающий слэш — тот самый корень сайта, то есть его главная страница.
Рассмотренный пример демонстрирует использование микрофреймворка Flask. Приставка «микро-» обычно говорит, что фреймворк берет на себя только маршрутизацию — сопоставление путей с обработчиками. Иногда микрофреймворк включает в себя формирование простых ответов — скажем, текстовых ответов, как в примере выше.
Чем микрофреймворки отличаются от обычных
«Микроскопичность» часто связана еще и с тем, что реализованные с помощью микрофреймворков небольшие веб-приложения умещаются всего в один файл с кодом!
А вот Django и другие большие фреймворки уже требуют тщательного распределения кода по пакетам и модулям в соответствии со строгими правилами.
Скорее всего, к микрофреймворку вы будете со временем добавлять библиотеки с дополнительной функциональностью. При этом большой фреймворк обычно уже укомплектован кодом на все случаи жизни.
Такое разделение на «разумный минимум» и «все сразу и сразу по строгим правилам» сказывается на простоте изучения. С микрофреймворком сильно проще стартовать. Большие фреймворки можно будет освоить позже, когда вы освоитесь с основами веб-разработки и решите создать что-то большое и сложное.
Вы могли бы подумать, что микрофреймворки — это нечто «игрушечное» или «учебное», но это не совсем верный вывод.
Микрофреймворки применяются в реальных проектах, в том числе и больших. Разница между большим фреймворком и микрофреймворком с дополнительными библиотеками может быть минимальна. Часто выбор вообще зависит от предпочтений разработчика.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.