Обзорный анализ Python веб-фреймворков
Посмотрим, что выгодно отличает фреймворки Python от фреймворков в других языках и разберём, в чём они конкурируют между собой.
18К открытий20К показов
Вместе с ML и data scince, web является одним из трёх китов, на которых стоит популярность языка Python. В данном анализе опустим все прелести Python и рассмотрим только веб-инструментарий, то есть фреймворки. Посмотрим, что выгодно отличает их от фреймворков в других языках, и разберём, в чём они конкурируют между собой.
Полезен такой разбор, думаю, будет в первую очередь тем, кто только входит в веб-разработку на Python. А также тем, кто не знает к изучению какой следующей технологии приступить.
Судя по анализу 60 вакансий на позицию Python-разработчика на портале dou.ua, сегодня на рынке востребованы следующие фреймворки (для каждой технологии указано количество связанных вакансий):
Django— 21;Flask— 13;Aiohttp— 5;FastAPI— 4;Falcon— 1;Bottle— 1.
В виде диаграммы представить данную информацию можно так:
Для меня оказалось неожиданным, что Django упомянут в большинстве вакансий. Ещё удивило присутствие Bottle.
Определим критерии для сравнения инструментов:
- документация — насколько читабельна, полна и актуальна документация проекта. Бонусы при оценке получат проекты, имеющие детальные туториалы;
- комьюнити — наличие сообщества единомышленников-разработчиков, работающих с данной технологией и масштабы такого сообщества;
- архитектура — насколько логично и в соответствии с паттернами проектирования построена структура фреймворка;
- функционал — встроенный функционал фреймворка, который покрывает нужды разработчика без подключения сторонних модулей;
- настройка — насколько фреймворк легко настроить и насколько управляем проект, работающий под фреймворком.
Итак, перейдём к самому анализу и начнём, пожалуй, с фаворита рынка — Django.
Django
История этого фреймворка Python начинается в 2003 году, когда разработчики из американской газеты Lawrence Journal-World решили пилить феб-приложения на Python. Уже в 2005 году ребята выкатили в свободное плавание своё детище как веб-фреймворк.
Чем Django так хорош?
Модульность и расширяемость
Во-первых, к модульности принуждает MTV (model-template-view) архитектура фреймворка. С бизнес-логикой приложения, его визуальным оформлением, структурой данных, разработчик работает отдельно.
Хорошая практика в Django — выделять логически обособленный функционал приложения в отдельный application внутри фреймворка. По сути, вы легко компонуете проект из апликейшинов как из конструктора лего.
В Django присутствует каталог на сотни плагинов, которые решают задачи от настройки sitemap до развёртывания полноценной CMS и создания REST API.
Помимо предусмотренных разработчиками фреймворка решений, достаточно просто подключаются аналоги (например Jinja2 вместо стандартного шаблонизатора Django). Хотя заменить, например, ORM достаточно тяжело.
Развитая экосистема
Как я уже упомянул, существуют сотни плагинов для Django, решающих ряд насущных нужд. Помимо сахара в виде таких плагинов фреймворк самодостаточен. «Из коробки» встроены ORM, шаблонизатор, мультиязычность, админ-панель, автоматическая документация и так далее.
Система фреймворка настолько модульна, что параллельно может выполняться разработка бизнес-логики приложения, его API, внешних представлений, наполнение приложения информацией SMM-менеджерами и так далее.
Стабильность
В некой мере этот пункт можно отнести и к экосистеме. Django имеет полную и достаточно качественную документацию. Существуют её переводы — в том числе и на русский язык.
Сообщество разработчиков на Django насчитывает тысячи человек. На любой вопрос разработчик гарантированно найдёт ответ.
Фреймворк используется с 2005 года, и за 16 лет множество багов было устранено, а фич реализовано и улучшено.
Django развивается и поддерживается огромным комьюнити. Django Software Foundation — это некоммерческая организация, которая поддерживает обучение фреймворку, его развитие и распространение.
На Django написаны YouTube, Pinterest, Google. А такие проекты, работающие на Django, подтверждают стабильность экосистемы при работе с большими нагрузками.
Минусы Django:
Для небольших проектов функционал Django избыточен, но в то же время возможности асинхронности в нём весьма ограничены. Поэтому для работы с легкими или асинхронными проектами предпочитают использовать другие фреймворки. Многие встроенные модули достаточно тяжело заменить — админ-панель не всегда легко кастомизировать, а про ORM я уже упоминал. И она, кстати, значительно уступает по гибкости SQLAlchemy.
Итоги:
- документация — 5;
- комьюнити — 5;
- архитектура — 4;
- функционал — 4;
- настройка — 5.
Flask
Flask был создан в 2010 году австрийским программистом Армином Ронахером в качестве первоапрельской шутки. В одном проекте он попробовал собрать свои библиотеки — шаблонизатор Jinja и Werkzeug — инструментарий для WSGI (стандартного интерфейса Python между веб-сервисами). В результате вышел фреймворк Python, о котором мы сейчас и говорим.
За что любят Flask?
Лёгкость
По своей сути Flask — это скелет, на который разработчик может навесить любой удобный для него инструментарий. Причём этот инструментарий не навязывается фреймворком, как в случае с Django. Например, выбирая Flask для проекта, разработчик волен в выборе ORM. Как правило, выбор падает на SQLAlchemy.
Соответственно, Flask выбирают для большего контроля над используемыми компонентами, обретения навыков в настройке и конфигурировании проект. И когда нужен легкий бэк.
По умолчанию Flask предоставляет:
- сервер разработки и отладчик;
- интегрированные инструменты для модульного тестирования;
- возможность отправки REST запросов;
- шаблонизатор Jinja2;
- пакеты-расширения, например flask-login, flask-sqlalchemy, flask-wtf.
Комьюнити
По состоянию на 2016 год, репозиторий с Flask был самым популярным репозиторием Python на GitHub. В него было внесено более 3 тысяч изменений, у него больше 29 тысяч звезд, а за изменениями следят почти 2 тысячи пользователей. Более 250 разработчиков внесли свой вклад.
Благодаря Flask работают Pinterest и LinkedIn.
Поиск ответа на вопросы, связанные с фреймворком, не займёт много времени как и в случае с Django.
Документация
Документация по Flask покрывает практически все возможные вопросы связанные с фреймворком и имеет перевод на русский язык. Она покрывает в том числе разные варианты развёртывания приложения и вопросы подключения сторонних модулей к проекту. Например SQLAlchemy.
Минусы Flask:
Несмотря на все плюсы и простоту фреймворка, он остаётся всего лишь ядром, которое зависит от двух внешних библиотек (Jinja и Werkzeug) и к которому прикрепляются сторонние инструменты.
Flask — песочница для программистов, где можно отточить свои навыки и протестировать решение с помощью нового модуля или библиотеки. Из этого достоинства фреймворка следует и его минус — структура и логика проекта полностью зависят от разработчика, работавшего над проектом.
Итоги:
- документация — 5;
- комьюнити — 5;
- архитектура — 3;
- функционал — 3;
- настройка — 4.
Aiohttp
Aiohttp — это веб-сервер для asyncio. Соответственно имеет весьма ограниченный функционал как самостоятельный инструмент и предназначен для решения узкого круга задач.
В чём особенность инструмента?
Столп на котором базируется Aiohttp — вебсокеты.
Веб-сокетам, в отличие от обычных HTTP-запросов, для ответа не нужны повторяющиеся запросы. Достаточно единожды выполнить запрос и ждать отклика. То есть просто слушать сервер, который будет отправлять вам сообщения по мере готовности.
Веб-сокеты стоит использовать в:
- приложениях реального времени;
- чат-приложениях;
- IoT-приложениях;
- многопользовательских играх.
Минусы
Скудная документация, хоть она и имеет примеры выполнения некоторых задач. Например сокращатель ссылок, клон твиттера, чат, и так далее. Также, разработчику, особенно начинающему, будет достаточно трудно найти ответ на вопрос, который может возникнуть при работе с Aiohttp.
Итоги:
- документация — 3;
- комьюнити — 3;
- архитектура — 3;
- функционал — 3;
- настройка — 4.
FastAPI
FastAPI — фреймворк Python для лёгкого создания API-серверов со встроенными валидацией, сериализацией и асинхронностью. Стоит он на плечах двух других фреймворков. Работой с web в FastAPI занимается Starlette, за валидацию отвечает Pydantic.
Возможности:
- из коробки возможность работы с GraphQL;
- встроенные вебсокеты;
- встроенная аутентификация/автроизация, поддержка JWT, OAuth2;
- автоматическая документация.
Как видим, все возможные плюшки для быстрой разработки быстрого и мощного API прямо в коробке. При этом все возможности хорошо задокументированы, документация описывает буквально всё, включая дебаг и тестирование.
Минусы FastAPI
Пожалуй, достаточно небольшое сообщество и не самые простые настройки для корректно работы приложения. А в тандеме это даёт повышеный порог входа в технологию, с которой новичку будет не так просто разобраться (учтём ещё и асинхронность фреймворка).
Итоги:
- документация — 5;
- комьюнити — 3;
- архитектура — 5;
- функционал — 4;
- настройка — 3.
Falcon и Bottle
Отдельного раздела для каждого из данных двух инструментов, думаю, будет много, так как используют их крайне редко, и решают они достаточно простые задачи.
Falcon как правило, позиционируется как более быстрый аналог легко масштабируемой API вместо стандартного инструментария Фласка.
Bottle, в свою очередь — как минимальный набор базовых инструментов для работы с вебом, включающий в себя работу с шаблонами и обработку форм.
18К открытий20К показов