Что это
Быстрый способ написать серверную часть на Python: приём заказов, расчёт корзины, панель управления. Работает с сайтом и с ботами одинаково.
Как используем
Сервер интернет-магазина, приёмник отчётов приложений, API для Telegram-кабинетов. Ставится в контейнере рядом с сайтом.
Где FastAPI нужен бизнесу
- Сайту нужна своя логика: остатки по размерам и цветам, оптовые цены, заказы, а не только страницы с текстом.
- Владельцу нужна панель управления под его задачи, а не универсальная админка.
- Боту нужен веб-дашборд с графиками на тех же данных.
- Несколько программ (сайт, бот, приложение) должны работать с одной базой через один вход.
Как мы это используем
- Интернет-магазин. В магазине рубашек витрина на Nuxt, а REST API на FastAPI отдаёт каталог, принимает заказы и хранит настройки сайта. Работа с базой — SQLAlchemy 2 в асинхронном режиме, схема применяется миграциями Alembic при старте. Фото с телефона сервер сам поворачивает по метке камеры, уменьшает и переводит в webp.
- Дашборд к боту. В финансовом ассистенте FastAPI отдаёт данные дашборду, а вся аналитика лежит в одном слое с ботом, поэтому цифры в Telegram и на графиках совпадают. Чужим Telegram-ID API отвечает 401.
Сайты со своей серверной частью делаем в разделе Сайты и интернет-магазины.
Типичные проблемы
- Доверять браузеру. Содержимое корзины лежит в браузере, а его можно отредактировать как угодно. Поэтому при оформлении цены и итог пересчитывает сервер по базе, он же применяет оптовую цену.
- Открытые маршруты записи. Каждый маршрут, который что-то меняет, проверяет вход. Иначе каталог правит любой, кто нашёл адрес API.
- Перебор паролей с разных адресов. Лимит запросов по IP на nginx от этого не спасает. В магазине после пяти неверных паролей подряд вход для логина закрывается на 15 минут, независимо от адреса.
- Схема базы без миграций. Без них откат версии делается только из копии базы. С миграциями схема меняется по шагам и без потери данных.
Когда это не нужно
Если сайт — это страницы с текстом, кейсами и формой заявки, отдельная серверная часть не нужна: хватит Nuxt с контентом в файлах или WordPress. FastAPI оправдан, когда на сайте появляются товары, заказы, личные кабинеты или данные, общие с ботом.