FastAPI успел войти в стандарт при выборе фреймворка для написания бэкенд приложении на питоне. В вакансиях часто мелькает “работа с FastAPI”. Надеюсь, что это не дойдет до того, что люди будут именовать себя “FastAPI разработчик”, по аналогии с “Django разработчик”.
Коммьюнити кстати недолюбливает FastAPI. И есть за что.
485 открытых PR, некоторые висят с 2020 года. Проект развивается по сути единолично основателем, что явно не способствует увеличению бас фактора.
FastAPI так же обладает не такой богатой экосистемой плагинов, как например Django.
Получается, что при выборе инструмента для проекта сталкиваешься с дилеммой: абстракция и батарейки Django или модный, современный, типизированный и асинхронный FastAPI.
Litestar между Django и FastAPI
Вот, что пишут основатели про философию проекта:
-
Litestar - это проект, управляемый сообществом. Это означает, что проектом руководит не один автор, а скорее команда, поддерживаемая коммьюнити пользователей. В настоящее время у Litestar 5 основных контрибьюторов, и он очень активно развивается.
-
Litestar вдохновлялся NestJS - современном фреймворке TypeScript.
-
Litestar использует как function-based эндпоинты, так и class-based, наследуя мощь ООП.
-
Litestar - это не микрофреймворк. В отличие от таких фреймворков, как FastAPI, Starlette или Flask, Litestar включает в себя множество готовых функциональных возможностей, необходимых для современного веб-приложения, таких как интеграция ORM, сеансы на стороне клиента и сервера, кэширование, интеграция OpenTelemetry и многое другое. Он не стремится стать “следующим Django” (например, у него никогда не будет собственного ORM), но и не ограничивает себя скоупом.
Близость к коммьюнити это не просто слова для команды. Для меня очень примечательно, как быстро команда реагирует на тренды и фидбэк от сообщества. Чего только стоит отдельные абстракции над htmx. Ни один питонячий фреймворк не смог так быстро сделать батарейку для htmx. Это очень показательно.
JSON API или MVC фуллстэк?
Litestar в целом все равно. Мы в hellolawyer используем как JSON API, без интеграции с SQLAlchemy ORM, пишем с SQLAlchemy query builder.
Очень приятно строить контроллеры, определять dependency injection на уровне раута, приложения или конкретного эндпоинта.
Но киллер фичей для нас оказалось несколько OpenAPI интеграции. Особенно понравилась интеграция elements. Можно полностью забыть про Postman и подобные инструменты. UI документации выглядит очень приятно.
В целом DX с Litestar точно не ниже FastAPI. Супер отзывчивое коммьюнити в Discord, которое отвечает на все вопросы. Растущее количество интеграции. Все это очень сильно привлекает.
Из минусов — проект в стадии активного развития. Только недавно у них был ребрендинг и переход на другую мажорную версию, на которую мы пока что еще не осилили переход (скорее из-за специфики стартапа, а не сложности перехода).
Пример базового приожения
from litestar import Litestar, get
@get("/")
async def index() -> str:
return "Hello, world!"
@get("/books/{book_id:int}")
async def get_book(book_id: int) -> dict[str, int]:
return {"book_id": book_id}
app = Litestar([index, get_book])
Выглядит как вполне стандартный и простой способ декларирования эндпоинтов.
Я для себя точно решил, что все новые проекты, которые будут подходить под питонячий стэк и требовать бэкенд, буду писать с помощью Litestar.