В чем разница между FastAPI и Flask?

«В чем разница между FastAPI и Flask?» — вопрос из категории Python, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Flask и FastAPI — Python-фреймворки для веб-разработки, но с разной архитектурой и фокусом.

Flask (WSGI-фреймворк)

  • Архитектура: Синхронный WSGI-фреймворк. Для обработки каждого запроса создается отдельный worker/поток.
  • Подход: «Микрофреймворк». Предоставляет ядро (маршрутизация, шаблоны), а все остальное (валидация, ORM, асинхронность) добавляется расширениями.
  • Сложность: Проще для начала, но требует больше ручной настройки для сложных API.

FastAPI (ASGI-фреймворк)

  • Архитектура: Асинхронный ASGI-фреймворк. Позволяет эффективно обрабатывать множество одновременных I/O-операций (запросы к БД, внешние API) с помощью async/await.
  • Подход: «Батарейки в комплекте». Имеет встроенную валидацию данных через Pydantic, автоматическую генерацию документации OpenAPI (Swagger/ReDoc) и dependency injection.
  • Производительность: Выше, чем у Flask, благодаря асинхронности и использованию быстрых библиотек (Pydantic, Starlette).
Сравнительная таблица: Характеристика Flask FastAPI
Асинхронность Требует расширений (Celery, gevent) Встроенная поддержка (async/await)
Валидация данных Вручную или через расширения (Flask-WTF, Marshmallow) Встроенная, на основе аннотаций типов Python и Pydantic
Документация API Вручную или через расширения (Flask-RESTX) Автоматическая генерация OpenAPI/Swagger
Скорость разработки Быстрый старт, но замедляется на сложных API Быстрый старт, скорость не падает благодаря встроенным возможностям

Пример конечной точки в FastAPI:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float

@app.post("/items/")
async def create_item(item: Item):
    # `item` уже валидирован. Документация сгенерирована автоматически.
    return {"item_name": item.name, "message": "Item created"}

Вывод: Выберите Flask для небольших, традиционных веб-приложений или монолитов. Выберите FastAPI для современных высокопроизводительных REST/GraphQL API, где важны валидация, документация и асинхронная обработка.