Серверная часть сервиса хранения и управления информации о пользователе
- Управление категориями, параметрами, источниками данных.
- Управление правами доступа к информации
- Получение/изменение пользовательской информации через HTTP
- Потоковое изменение пользовательской информации на основе данных передаваемых OAuth методами входа
- Про понятия использоованные в этом пункте можно почитать ниже(см. Основные абстракции)
-
Перейдите в папку проекта
-
Создайте виртуальное окружение командой и активируйте его:
foo@bar:~$ python3 -m venv venv foo@bar:~$ source ./venv/bin/activate # На MacOS и Linux foo@bar:~$ venv\Scripts\activate # На Windows
-
Установите библиотеки
foo@bar:~$ pip install -r requirements.txt foo@bar:~$ pip install -r requirements.dev.txt
-
Запускайте приложение!
foo@bar:~$ python -m userdata_api start --instance api -- запустит АПИ foo@bar:~$ python -m userdata_api start --instance worker -- запустит Kafka worker
Приложение состоит из двух частей - АПИ и Kafka worker'а.
АПИ нужно для управления структурой пользовательских данных - контроль над категориями данных, параметрами, источниками данных. Также, в АПИ пользовательские данные может слать сам пользователь(владелец этих данных), а также админ
Kafka worker нужен для того, чтобы разгребать поступающие от OAuth методов авторизации AuthAPI пользовательские данные
🌟 Все параметры для Kafka являются необязательными
DB_DSN=postgresql://postgres@localhost:5432/postgres
– Данные для подключения к БДKAFKA_DSN
- URL для подключение к KafkaKAFKA_LOGIN
- логин для подключения к KafkaKAFKA_PASSWORD
- пароль для подключения к KafkaKAFKA_TOPICS
- Kafka топики, из которых читается информацияKAFKA_GROUP_ID
- Группа, от имени которой происходит чтение топиков- Остальные общие для всех АПИ параметры описаны тут
-
Параметр - поле для пользовательской информации(например: Email, Телефон, Адрес, Курс обучения, Номер студенческого билета)
-
Категория - объединение нескольких параметров по общему признаку. Например: Email, Телефон - личная информация; Курс обучения, Номер студенческого билета - учеба. Категория имеет
read_scope
- право на её чтение другими пользователями иupdate_scope
- право на её изменение дургими пользователями -
Источник - откуда пришла информация о пользователе. Наприимер: VK, GitHub, LKMSU, User(он сам её добавил), Admin(админ её добавил). Источник имеет
trust_level
: то есть информации из одних источников мы можем доверять больше, чем другим -
Информация - само значение поля. Имеет ссылку на параметр и источник. Соответственно, значение одного параметра у пользователя может быть списком, так как информация для этого параметра пришла из различных источников
Пользователь с id=1
Категория | Параметр | Источник | Значение |
---|---|---|---|
Учёба | Курс обучения | User | 4 |
Учёба | Курс обучения | LKMSU | 4 |
Учёба | Номер студенческого билета | LKMSU | 42424242 |
Личная информация | User | [email protected] | |
Личная информация | Admin | [email protected] | |
Личная информация | VK | [email protected] | |
Личная информация | Yandex | [email protected] | |
Личная информация | GitHub | [email protected] | |
Личная информация | Телефон | User | +79094242 |
- Дёрнуть ручку
POST /category
. Вы передаете
{
"name": "", // Имя категории
"read_scope": "", // Скоуп на чтение
"update_scope": "" // Скоуп на запись
}
- Сооздать в Auth API нужные scopes(если передали не
null
)
- Дернуть ручку
POST /category/{category_id}/param
. Передать
{
"name": "", // Имя параметра
"is_required": bool, // Обязателен ли он
"changeable": bool, // Изменяем ли он после установки
"type": "all || last || most_trusted" // Какой значение параметра из множества, задаваемого источником, будет возвращаться
}
- Дернуть ручку
GET /category
. Если нужна иинформация о параметрах, которые есть в каждой из категорий, то дернуть ручкуGET /category?query=param
- Дернуть ручку
POST /user/{user_id}
, передать туда
{
"items": [ // Список новых значений
{
"category": "", // Имя категории в которой находится параметр
"param": "", // Имя изменяемого параметра
"value": "" // Новое значение. Если раньше значения не существовало, то оно будет создано. Если передать null, то значение будет удалено.
}
],
"source": "string" // Источник информации. По http доступно только user и admin
}
-
Информацию меняется только в пределах источника. То есть админ не может поменять инфоормацию, переданную пользователем. Он может только создать новую или поменять информацию из источника admin
-
Пользователь может создать любую информацию о себе
-
Пользователь может обновить/удалить только изменяемую информацию
-
Неизменяемая информация изменяема при наличии scope
userdata.info.update
-
Обновить информацию о другом пользователе из конкретноой категории можно только при наличии права на изменение в этой категории (см.
category.update_scope
)
Дернуть ручку GET /user/{user_id}
.
- Пользователь может получить всю информацию о себе
Дернуть ручку GET /user?users=...?categories=...
.
-
Ручка закрыта за скоупом
userdata.info.admin
-
Query параметры
users
иcategories
обязательные
В обеих GET /user/
ручках информация будет возвращаться таким образом:
-
В соответствии с переданными scopes
-
Можно получить только информацию из тех категорий на которые у него есть права (см
category.read_scope
) -
С поставленными
param.type
.- Если поставлен
all
то вернется информация соотв. данному параметру из всех источников last
- вернется последняя обновленная информацияmost_trusted
- вернется информация из самого доверенного источника
- Если поставлен
-
Основная информация по разработке наших приложений
-
Ссылка на страницу с информацией по разработке userdata-api