Litestar: тихий убийца FastAPI или просто новый любимчик питонистов?

Litestar: тихий убийца FastAPI или просто новый любимчик питонистов?

Представь себе: сидишь такой вечером, ковыряешь backend, и вдруг ловишь мысль: «А нет ли чего-нибудь новенького в Python-ASGI лесу? Что-то свежее, но без того, чтобы я опять страдал с документацией и кастылями?»

И тут — хоба! — появляется Litestar.

Фреймворк, о котором ещё полтора года назад знали только люди, читающие changelog’и перед сном. А теперь его всё чаще рекомендуют как «FastAPI, только стабильнее, взрослее и без магии, которая взрывает мозг».

И давай сразу честно: Litestar — это не «убийца FastAPI». Это «умный младший брат», который посмотрел, как делают другие, и решил: «А я сделаю так же… только чуть аккуратнее».

Разворачивай пиво (или кофе), сейчас расскажу, почему Litestar — один из самых приятных Python-фреймворков последних лет.

Откуда вообще взялся этот Litestar

Litestar — это прямой наследник Starlite, который вырос и обрёл новую жизнь. Его создавали с идеей: «Давайте возьмём лучшее от FastAPI, Starlette и Django, но сделаем менее магическим, более структурным и предсказуемым».

И, кажется, получилось.

Главный принцип Litestar: никакой магии — всё эксплицитно, всё под контролем.

Для разработчика это благословение. Особенно когда проект разрастается, и хочется минимизировать «сюрпризы» от фреймворка.

Litestar по-простому: что это вообще такое?

Если было лень гуглить (нормально, я тебя понимаю), то вот кратко:

  • Litestar — асинхронный Python-фреймворк на базе ASGI.
  • Он работает поверх того же Starlette (частично), но добавляет много удобных штук.
  • Поддерживает сильную типизацию.
  • Основан на Pydantic v2, msgspec и dataclasses (можешь выбрать!).
  • Управление приложением — модульное и строгое, как у настоящих микросервисов.
  • Есть встроенный DI (dependency injection), событийная система, роутинг без магии, middlewares, guards и даже встроенный OpenAPI.

Фреймворк ориентирован скорее на крупные проекты, чем на «хочу написать API для будильника, который пишет в базу, что я не проснулся».

Почему Litestar вообще стоит твоего внимания

Давай разберём сильные стороны — но по-человечески, без маркетинговых лозунгов.

1. Структурированность уровня “ну наконец-то!”

Если FastAPI — это лёгкий вход и быстрые MVP, то Litestar — это порядок, дисциплина и «всё по местам».

У фреймворка есть чёткая концепция:

  • Controllers
  • Routers
  • Layers
  • DI Provider
  • Guard’ы
  • Event handlers

Ты сам решаешь, как собирать приложение: как LEGO, где каждый блок логически отделён.

Никаких «случайных зависимостей», «магических импортов» или «почему у меня Depends работает только по пятницам».

2. DI сделан так, что хочется аплодировать

В FastAPI DI неплохой. В Litestar — он крутой.

Вот пример:

from litestar import Controller, get, Provide async def get_user(): return {"id": 1, "name": "Артур"} class UserController(Controller): dependencies = {"user": Provide(get_user)} @get("/me") async def me(self, user): return user

DI работает:

  • на уровне контроллера,
  • роута,
  • приложения,
  • модуля,
  • глобально.

При этом он предсказуемый, без тайной магии.

И это прям кайф.

3. Поддержка разных схем данных (Pydantic, dataclasses, msgspec)

Вот FastAPI — ты хочешь или не хочешь — ты будешь использовать Pydantic.

А Litestar говорит:

«Хочешь dataclasses? Пожалуйста. Хочешь msgspec и максимальную скорость? Берите. Остался на Pydantic v2? Всё поддерживаем».

Например, модель на msgspec выглядит так:

import msgspec class User(msgspec.Struct): id: int name: str

А работает в 5+ раз быстрее Pydantic.

Для высоконагруженных API — подарок.

4. Скорость… ну, быстрая. Прям реально

Litestar использует:

  • uvicorn
  • uvloop
  • msgspec / pydantic-core
  • оптимизированные сериализаторы

Результат:

  • он быстрее FastAPI на сложных моделях;
  • он лучше масштабируется;
  • и почти не просаживается при обработке больших JSON.

Нет, это не Go и не Rust, но для Python — на уровне топа.

5. Маршрутизация без боли

FastAPI иногда превращает декораторы в городскую магию — вроде всё работает, но почему — лучше не думать.

В Litestar маршрутизация супер-прозрачная:

from litestar import Litestar, Router, get @get("/hello") async def hello(): return {"msg": "Привет!"} routes = [Router(path="/api", route_handlers=[hello])] app = Litestar(route_handlers=routes)

Хочешь как контроллеры? Никакой проблемы.

Хочешь как модульное дерево? Пожалуйста.

6. Встроенные плагины и расширение функционала

Litestar уже «из коробки» умеет то, что FastAPI часто требует доустановки:

  • rate limiting
  • CORS
  • compression
  • openapi
  • static files
  • templates
  • background tasks
  • events
  • guards (ролевые/permission-based ограничения)

Очень приятно, когда фреймворк не заставляет тянуть «двадцать плагинов из GitHub».

7. Документация — не просто хорошая, а приятная

Вот здесь прям респект авторам.

Документация Litestar — это:

  • супер-чёткая структура;
  • много примеров;
  • понятные объяснения;
  • отдельная страница для «best practices»;
  • реальные советы по структуре кода.

Читаешь и думаешь: «А можно всем фреймворкам так же?»

Как выглядит Litestar в бою

Окей, хватит теории — поехали кода.

Самый простой сервер

from litestar import Litestar, get @get("/") async def root(): return {"hello": "litestar"} app = Litestar(route_handlers=[root])

Всё. Стартуем через uvicorn:

uvicorn app:app --reload

Контроллеры: красота и порядок

from litestar import Controller, get class UserController(Controller): path = "/users" @get("/{user_id:int}") async def get_user(self, user_id: int): return {"id": user_id, "name": "Иван"}

Подключение:

app = Litestar(route_handlers=[UserController])

Middleware простое, как утренний чай

from litestar import Middleware, Response from litestar.middleware.base import AbstractMiddleware class HeaderMiddleware(AbstractMiddleware): async def process_response(self, request, response): response.headers["X-App"] = "Litestar" return response app = Litestar( route_handlers=[UserController], middleware=[Middleware(HeaderMiddleware)] )

WebSockets? Ну давай, конечно

from litestar import websocket @websocket("/ws") async def ws_handler(socket): await socket.accept() while True: data = await socket.receive_text() await socket.send_text(f"Ты сказал: {data}")

Ничего лишнего.

Когда стоит брать Litestar

Бери Litestar, если:

  • делаешь микросервисную архитектуру;
  • хочешь строгую структуру проекта;
  • у тебя команда среднего/сеньор уровня;
  • нужен DI, который работает «как надо»;
  • планируешь долгоживущий проект;
  • хочешь максимальную скорость Python-а.

Когда НЕ стоит брать Litestar

  • Ты делаешь учебный проект → FastAPI проще.
  • Команда только начала изучать async → будет больно.
  • Нужно много готовых решений → FastAPI-комьюнити пока богаче.
  • Сервис микроскопический → Litestar может быть «overkill».

Litestar — это фреймворк, который наконец-то делает порядок нормой

Это Python-фреймворк, который:

  • современный,
  • быстрый,
  • структурный,
  • предсказуемый,
  • расширяемый,
  • и очень приятно написан.

Неудивительно, что многие команды уже начали миграцию FastAPI → Litestar на больших проектах.

🙌 Если статья была полезной

Буду рад лайку и комментарию — это помогает продвигать материалы и показывает, что стоит разобрать в следующих публикациях.

1
Начать дискуссию