Перейти к содержанию

Как устроено

Внутре скрыт многопоточный, многопроцессорный и асинхронный сервер.
Основной фреймворк FastAPI.

Модель пользователя (User) имеет атрибуты:

  1. id (уникален, неизменяем)
  2. username (уникален, неизменяем)
  3. email (уникален, неизменяем)
  4. password
  5. first name
  6. last name
  7. is_superuser
  8. is_active
  9. is_verified

Может быть расширена.

Модель группы (Group) имеет атрибуты:

  1. id (уникален, неизменяем)
  2. groupname (уникален, неизменяем)
  3. 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 укажите переменную выше


Последнее обновление: 2022-10-20