Как устроено
Внутре скрыт многопоточный, многопроцессорный и асинхронный сервер.
Основной фреймворк FastAPI.
Модель пользователя (User) имеет атрибуты:
- id (уникален, неизменяем)
- username (уникален, неизменяем)
- email (уникален, неизменяем)
- password
- first name
- last name
- is_superuser
- is_active
- is_verified
Может быть расширена.
Модель группы (Group) имеет атрибуты:
- id (уникален, неизменяем)
- groupname (уникален, неизменяем)
- slug (человеко-понятный урл, уникален, неизменяем)
Для взаимодействия с БД используется SQLAlchemy.
Список поддерживаемых СУБД и диалектов.
Однако везде есть нюансы, например SQLite не поддерживает регистронезависимый поиск, а перенос данных в другую СУБД является нетривиальной задачей.
Управление состоянием БД¶
Миграциями БД управляет Alembic:
Но в данном случае стандартные команды alembic отдаются через скрипт-обертку:
python staff.py alembic upgrade head
python staff.py alembic revision -m "init" --autogenerate
# и т.д.
Управление потоками¶
# определяет кол-во потоков, рекомендуется максимум 2-4 потока на ядро
>>WEB_CONCURRENCY
Самый полный и свежий список переменных сервиса можно найти в файле api/app/core/config.py
.
Верификация токенов¶
Ниже приведен действующий ключ
, (в документации мог устареть) можно на нём верифицировать полученные токены, при этом нужно учитывать то обстоятельство, что изменения в привилегиях пользователя будут отражены только тогда, когда будет получен обновленный токен, по умолчанию время актуальности токена составляет 15 мин.
Чтобы получить сразу обновленное состояние пользователя, можно верифицировать токен обратившись в сервис с соответствующим запросом.
(чтобы убедится в актуальности ключа выполните GET /pub-key
)
# pub-key.pem
-----BEGIN PUBLIC KEY-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEypn2lkhKaVEUl5jeA3wqiZk53FRDIXLQ
9yXuDa8R+xaIm8DH0UE36lA2j1ia/b/uyKtN1ClT/OOws/W7a7A7UQ==
-----END PUBLIC KEY-----
Интеграция со сторонними системами¶
>>SENTRY_DSN
для интеграции с Sentry укажите переменную выше