Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Всем привет, меня зовут Абай. Я являюсь Back-End разработчиком в 13LAB.
После прочтения интересной статьи со сравнением NodeJS и FastAPI, у меня появилось желание высказать свое личное мнение об удобстве разработки бэкенда на Python и фреймворке FastAPI. В данной статье будут описаны мои личные ощущения, поэтому мое мнение может отличаться от вашего.
FastAPI - является легковесным асинхронным фреймворком для Python, который используют преимущественно для разработки API-сервисов. Фреймворк довольно молодой и существует всего лишь 5 лет. До 2021 года не имел большой популярности по сравнению с Flask и Django, но на данный момент уже стал намного востребованнее, что его стали использовать в МAANG компаниях (к примеру, Netflix). Создателем фреймворка является Sebastián Ramírez Montaño, разработав на базе микрофреймворка Starlette, в отличии от которого предоставляет больший функционал из коробки, что освобождает разработчиков от некоторой рутины.
✅ Плюсы разработки на FastAPI:
Скорость работы. FastAPI обходит все Python-фреймворки по производительности (по данным TechEmpower)
Гибкость на уровне Flask. У вас нет какой-либо утвержденной архитектуры, что дает волю вашей фантазии и различным подходам разработки, по сравнению с Django (использует MVC), в котором проект часто превращается в странную субстанцию из папок в папках.
Автоматическая OpenAPI документация. В Django и Flask, нужно подключать отдельные пакеты и создавать специальные классы для подключения документации к ним. Еще замечу, что к Flask очень мало информации на эту тему, а сама версия документации зачастую устаревшая. На Django это сделать уже намного проще, но также занимает некоторое время, в то же время в FastAPI все доступно из коробки.
Асинхронность. FastAPI использует ASGI-сервера по умолчанию, когда в том же Django нужно заниматься конфигурацией приложения с WSGI на ASGI, что занимает достаточно времени. Flask, к сожалению, не поддерживает асинхронность и работает лишь под WSGI.
Встроенная валидация данных. Недавно вышла поддержка Pydantic V2 в FastAPI, что ускоряет валидацию данных в 20 раз. Pydantic предоставляет готовые типы данных для валидации email, uuid, url и т.д. Вместо того, чтобы вручную писать проверки для содержимого json-файлов и обрабатывать ошибки валидации, он автоматизирует эти процессы.
Проработанная документация. В случае других фреймворков и библиотек приходится смотреть обучающие ролики из-за невнятной и громоздкой документации. У FastAPI таких проблем нет. Документация разделена на две части: для новичков и более продвинутых разработчиков. В ней большое количество примеров и лучших практик, что также является несомненным плюсом.
❌ Минусы разработки FastAPI:
Мало информации. Это относится к JWT-токенам, S3 облачным хранилищам, сборке образа в Docker Compose и другим технологиям. Зачастую вам приходится изучать реализации на других фреймворках, так как информации не все всегда бывает достаточно в документации FastAPI.
Плохая реализация асинхронных библиотек. У асинхронных библиотек на Python зачастую нечитабельная документация, из-за чего их подключении к FastAPI иногда отнимает кучу времени. Часто это проявляется, когда приходится использовать асинхронные драйвера или ORM для баз данных. В AsyncIOMotor (асинхронный драйвер для MongoDB) не работают тайпхинты, которые подсказывают, как прописываются методы, из-за чего неоднократно возвращаешься к документации, потому, что не можешь правильно написать название метода. В AsyncSQLAlchemy (асихронный ORM для SQL) есть неприятный момент в том, что метод
.query()
не является асинхронным и приходится прописывать все через.execute(),
как и другие методы:.select()
,.update()
,.delete(),
хотя это уже больше дело привычки.Нет удобной смены root_path. У меня никак не получалось его сменить с (“/”) на (“/api”), сколько не пытался прописывать в атрибутах самого объекта и менять настройки uvicorn. Единственный рабочий метод, который я обнаружил, это создавать объект класса
APIRouter()
и прописывать внутри атрибута prefix нужное вам значение, чтоб изменить начальную точку, но это надо делать во всех объектах, что очень неудобно.# Как работает app = FastAPI(docs_url="/api/docs", redoc_url="/api/redoc", openapi_url="/api/openapi.json") # Как хотелось бы app = FastAPI(root_path = "/api")
Трудоустройство в СНГ. Вакансий для разработчиков на FastAPI все же мало на рынке, по сравнению с давно устоявшимися фреймворками, как Django, DRF и Flask, из-за чего проблематично найти работу. Понятное дело, что никто не хочет переписывать старые монолиты и сервисы, поскольку недостаточно хороших специалистов на рынке, которые умеют на нем писать.
Подведем итоги. FastAPI является одним из самых производительных и комфортных инструментов для веб-разработки на Python, а основные его недостатки проявляются лишь в отсутствии нужного количества информации, из-за его новизны.
Спасибо за помощь в оформлении статьи - @zaurbbb