Какие библиотеки часто используются в экосистеме FastAPI

Ответ

FastAPI имеет богатую экосистему библиотек, которые расширяют его функциональность. Их можно сгруппировать по задачам:

  • Валидация данных:

    • Pydantic: Является ядром FastAPI, используется для валидации, сериализации/десериализации данных и автоматической генерации OpenAPI-схем.
  • Серверы (ASGI):

    • Uvicorn: Рекомендуемый высокопроизводительный ASGI-сервер для запуска FastAPI в production.
    • Hypercorn: Альтернативный ASGI-сервер с поддержкой HTTP/2 и HTTP/3.
  • Базы данных и ORM:

    • SQLAlchemy: Самая популярная ORM для работы с реляционными БД. Используется вместе с драйверами вроде psycopg2-binary (для PostgreSQL).
    • Alembic: Инструмент для миграций схем баз данных, тесно интегрированный с SQLAlchemy.
    • SQLModel: Библиотека от автора FastAPI, объединяющая Pydantic и SQLAlchemy для упрощения работы с моделями.
    • Tortoise-ORM: Асинхронная ORM, вдохновленная Django ORM.
  • Аутентификация и безопасность:

    • python-jose и PyJWT: Для кодирования и декодирования JSON Web Tokens (JWT).
    • passlib и bcrypt: Для безопасного хеширования и верификации паролей.
  • Тестирование:

    • pytest: Стандарт де-факто для тестирования в Python.
    • httpx: Современный асинхронный HTTP-клиент, идеально подходящий для отправки запросов к приложению FastAPI внутри тестов.
  • Фоновые задачи:

    • Celery: Популярный фреймворк для выполнения отложенных и периодических задач.
  • Шаблонизация:

    • Jinja2: Используется, если приложению нужно рендерить HTML-страницы на стороне сервера.

Ответ 18+ 🔞

Слушай, ну вот смотри, FastAPI — это ж как конструктор, блядь, только для взрослых дядек, которые пишут API. Сам по себе он — огонь, но вся соль в том, что вокруг него целая куча библиотек, которые делают из него просто ебаный космос. Давай по полочкам разложу, а то смотришь на список и нихуя не понятно, что зачем.

Про данные (чтоб не присылали всякую хуйню) Тут царь и бог — Pydantic. Это не просто библиотека, это, сука, основа основ. Без него FastAPI — как танк без пушки. Всё, что прилетает в твой API или улетает из него, проходит через него. Он проверяет, сериализует и ещё, блядь, документацию сам пишет. Просто магия, а не инструмент.

На чём это всё ездит (сервера) Ну написал ты приложение, а запустить-то его на чём? Тут два основных варианта:

  • Uvicorn — это как гоночный болид, все его юзают, потому что он быстрый и стабильный. Для продакшена — самое то.
  • Hypercorn — типа крутой альтернативный чувак, который умеет в HTTP/2 и HTTP/3. Если тебе это надо — бери его.

Базы данных (куда всё складывать) А вот тут начинается настоящий разговор, блядь. Вариантов — овердохуища.

  • SQLAlchemy + psycopg2-binary — классика жанра. Если работаешь с PostgreSQL (а с чем ещё?), то это твой выбор. Мощно, гибко, но местами мозг выносит.
  • Alembic — это типа верный оруженосец SQLAlchemy. Когда твои модели данных меняются (а они меняются, пидарас), эта штука помогает аккуратно поменять структуру базы, чтобы всё не накрылось медным тазом.
  • SQLModel — а это уже от самого создателя FastAPI, Себастьяна. Гениальная, блядь, идея: взял Pydantic и SQLAlchemy, скрестил их и получил инструмент, где одна модель и для валидации, и для работы с БД. Красота, ядрёна вошь!
  • Tortoise-ORM — если ты фанат асинхронности и тебе милее подход, как в Django. Можно посмотреть.

Чтобы не заходил кто попало (аутентификация) Тут без вариантов — токены, блядь. JWT рулят.

  • python-jose или PyJWT — чтобы эти токены кодировать и декодировать. Разницы, по сути, нихуя.
  • passlib с bcrypt — чтобы пароли не хранить в открытом виде, а то потом удивление пиздец наступит, когда базу сливают. Эта связка превращает пароль в такую кашу, которую не обратить.

Как проверить, что ничего не сломал (тестирование)

  • pytest — и даже не думай про unittest, это стандарт де-факто. Пишешь тесты быстро и с кайфом.
  • httpx — а вот это, сука, ключевой момент для тестов FastAPI. Асинхронный клиент, который в тестах идеально стучится в твоё приложение. Без него — как без рук.

Чтобы не ждать, пока пользователь файл загрузит (фоновые задачи) Представь, пользователь заливает видео на 10 гигов. Ты что, будешь ему крутить loader, пока оно обрабатывается? Нет, блядь. Отправляешь задачу в фон.

  • Celery — монстр для таких дел. Поставил Redis/RabbitMQ, и пусть себе задачи в фоне шуршат. Незаменимая хуйня для серьёзных проектов.

Если вдруг надо HTML показать (шаблоны) FastAPI в основном для API, но если вдруг надо какую-то страничку сгенерить (админку там, или отчёт), то:

  • Jinja2 — старый, добрый и мощный шаблонизатор. Подключаешь, настраиваешь — и вуаля, твоё API умеет и HTML отдавать.

Короче, вся эта экосистема — как набор инструментов в гараже. Сначала берёшь Pydantic, Uvicorn и SQLModel (или SQLAlchemy), а потом, по мере надобности, докупаешь остальное. Главное — не пытайся впихнуть всё сразу, а то получится пиздопроебищно.