Как сравнить асинхронные фреймворки: FastAPI, aiohttp, Starlette?

FastAPI — высокоуровневый веб‑фреймворк на базе Starlette и Pydantic, с упором на декларативные схемы, валидацию и автогенерацию OpenAPI. Starlette — лёгкий ASGI‑фреймворк/«микроядро» для асинхронных сервисов. aiohttp — отдельный стек на базе asyncio с собственными сервером и клиентом HTTP, более низкоуровневый по отношению к ASGI‑семейству.
Подробный ответ

Эти три инструмента часто упоминают рядом, но они не на одном уровне абстракции.

Starlette

Starlette — лёгкий ASGI‑фреймворк/микро‑ядро:

  • реализует протокол ASGI, даёт routing, middleware, background‑tasks, WebSocket, sessions;

  • минималистичен, хорошо подходит как база для своих фреймворков и узкоспециализированных сервисов;

  • не навязывает модель данных/валидации — ты сам выбираешь Pydantic, dataclasses, Marshmallow и т.п.

Во многом Starlette — это «асинхронный Flask» на уровне ядра, но с ASGI и полноценной поддержкой современного стека.

FastAPI

FastAPI построен поверх Starlette и Pydantic:

  • декларативные эндпоинты с аннотациями типов: запросы/ответы, схемы, валидация;

  • автоматическая генерация OpenAPI, Swagger‑UI и Redoc‑документации из аннотаций;

  • удобная работа с зависимостями через dependency injection (Depends);

  • по умолчанию async‑подход, но можно и синхронные обработчики.

Если нужны быстрые в разработке REST/JSON‑сервисы с сильной типизацией и документированием, FastAPI — хороший выбор. Цена — зависимость от Pydantic, своя магия DI и чуть больший overhead по сравнению с «голой» Starlette.

aiohttp

aiohttp — это:

  • асинхронный HTTP‑клиент (очень широко используется для исходящих запросов);

  • асинхронный HTTP‑серверный фреймворк поверх asyncio (но не ASGI);

  • своя экосистема middleware, routing и т.п., но без автоматической генерации OpenAPI и «из коробки» схем/валидации, как у FastAPI.

Серверная часть aiohttp более низкоуровневая относительно FastAPI/Starlette; для сложных проектов часто придётся больше инфраструктуры писать руками.

Что отметить на собеседовании

  • FastAPI = Starlette + Pydantic + DI + OpenAPI — быстрый старт для typed‑API.

  • Starlette — лёгкая асинхронная основа (ASGI), на которой можно строить свои решения или более тонко контролировать стек.

  • aiohttp — отдельный async‑фреймворк и HTTP‑клиент, не завязанный на ASGI; хорош как клиент, серверную часть выбирают, если нужен максимально гибкий контроль или уже есть опыт/код на нём.

Выбор обычно такой: FastAPI — когда важна скорость разработки и типизация API; Starlette — когда нужен контролируемый лёгкий каркас ASGI без лишнего; aiohttp — когда нужен мощный HTTP‑клиент и/или более низкоуровневый серверный стек.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге