3.9 KiB
3.9 KiB
Документация Discours.io API
🚀 Быстрый старт
Запуск локально
# Стандартный запуск
python main.py
# С HTTPS (требует mkcert)
python dev.py
📚 Документация
Авторизация и безопасность
- Система авторизации - Токены, сессии, OAuth
- Архитектура - Диаграммы и схемы
- Миграция - Переход на новую версию
- Безопасность - Пароли, email, RBAC
- OAuth - Google, GitHub, Facebook, X, Telegram, VK, Yandex
- OAuth настройка - Инструкции по настройке OAuth провайдеров
Функциональность
- Система рейтингов - Лайки, дизлайки, featured статьи
- Подписки - Follow/unfollow логика
- Кэширование - Redis, производительность
- Схема данных Redis - Полная документация структур данных
- Пагинация комментариев - Иерархические комментарии
- Загрузка контента - Оптимизированные запросы
API и инфраструктура
- API методы - GraphQL эндпоинты
- Функции системы - Полный список возможностей
⚡ Ключевые возможности
Авторизация
- Модульная архитектура: SessionTokenManager, VerificationTokenManager, OAuthTokenManager
- OAuth провайдеры: 7 поддерживаемых провайдеров с PKCE
- RBAC: user/moderator/admin роли
- Производительность: 50% ускорение Redis, 30% меньше памяти
Nginx (упрощенная конфигурация)
- KISS принцип: ~60 строк вместо сложной конфигурации
- Dokku дефолты: Максимальное использование встроенных настроек
- SSL/TLS: TLS 1.2/1.3, HSTS, OCSP stapling
- Статические файлы: Кэширование на 1 год, gzip сжатие
- Безопасность: X-Frame-Options, X-Content-Type-Options
Реакции и комментарии
- Иерархические комментарии с эффективной пагинацией
- Физическое/логическое удаление (рейтинги/комментарии)
- Автоматический featured статус на основе лайков
- Distinct() оптимизация для JOIN запросов
Производительность
- Redis pipeline операции для пакетных запросов
- Автоматическая очистка истекших токенов
- Connection pooling и keepalive
- Type-safe codebase (mypy clean)
🔧 Конфигурация
# JWT
JWT_SECRET_KEY = "your-secret-key"
JWT_EXPIRATION_HOURS = 720 # 30 дней
# Redis
REDIS_URL = "redis://localhost:6379/0"
# OAuth (необходимые провайдеры)
OAUTH_CLIENTS_GOOGLE_ID = "..."
OAUTH_CLIENTS_GITHUB_ID = "..."
# ... другие провайдеры
🛠 Использование API
# Сессии
from auth.tokens.sessions import SessionTokenManager
sessions = SessionTokenManager()
token = await sessions.create_session(user_id, username=username)
# Мониторинг
from auth.tokens.monitoring import TokenMonitoring
monitoring = TokenMonitoring()
stats = await monitoring.get_token_statistics()