Эти три инструмента часто упоминают рядом, но они не на одном уровне абстракции.
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‑клиент и/или более низкоуровневый серверный стек.