Этот проект реализует API для KV-хранилища с использованием Tarantool в качестве базы данных. API предназначен для выполнения операций аутентификации пользователей, записи и чтения данных пачками с поддержкой параллельной обработки для повышения производительности.
- Аутентификация пользователей: Безопасная авторизация с получением токена.
- Авторизация пользователей: Все запросы к API (кроме /api/login) требуют валидный токен, передаваемый в заголовке
Authorization
. - Операции с данными пачками: Поддержка пакетных операций записи и чтения пар ключ-значение.
- Обработка ошибок: Корректная обработка некорректных запросов и ошибок базы данных.
Эндпоинт: POST /api/login
Описание: Аутентифицирует пользователя и возвращает токен авторизации.
Пример запроса:
{
"username": "your_username",
"password": "your_password"
}
Пример ответа:
200 OK
: Отсутствуют или некорректные учетные данные.
{
"token": "your_generated_token"
}
400 Bad Request
: Отсутствуют или некорректные учетные данные.
{"error":"invalid email or password"}
500 Internal Server Error
: Неверное имя пользователя или пароль.
{"error":"valid ending of operation is unable"}
Эндпоинт: POST /api/write
Описание: Записывает пачку пар ключ-значение в базу данных.
Пример запроса:
{
"data": {
"key1": "value1",
"key2": "value2",
"key3": 1
}
}
Пример ответа:
200 OK
: Отсутствуют или некорректные учетные данные.
{
"status": "success"
}
Или если часть ключей не удалось вставить.
{
"status": "partially_inserded",
"not_inserted": [
"key3",
"key1",
"key2"
]
}
Коды ошибок:
400 Bad Request
: Некорректный формат данных.
{"error":"<внутренняя_ошибка_парсера_json>"}
401 Unauthorized
: Неверный или отсутствующий токен.
{"error":"missing authorization token"/"invalid acess token"/"user is not auntificated"/"invalid email or password"}
500 Internal Server Error
: Ошибка базы данных.
{"error":"valid ending of operation is unable"}
Эндпоинт: POST /api/read
Описание: Считывает пачку пар ключ-значение из базы данных.
Пример запроса:
{
"keys": ["key1", "key2", "key3"]
}
Пример ответа:
200 OK
: Отсутствуют или некорректные учетные данные.
{
"data": {
"key1": "value1",
"key2": "value2",
"key3": 1
}
}
Или если части ключей нет, то сервис возвращает как найденные так и неайденные.
{
"data": {},
"not_found": [
"key3",
"key1",
"key2"
]
}
Коды ошибок:
400 Bad Request
: Отсутствуют или некорректные ключи.
{"error":"<внутренняя_ошибка_парсера_json>"}
401 Unauthorized
: Неверный или отсутствующий токен.
{"error":"missing authorization token"/"invalid acess token"/"user is not auntificated"/"invalid email or password"}
500 Internal Server Error
: Неверное имя пользователя или пароль.
{"error":"valid ending of operation is unable"}
-
Клонирование репозитория:
git clone https://github.com/yourusername/tarant-kv.git cd tarant-kv
-
Настройка окружения:
- Убедитесь, что на вашем компьютере установлены Docker и Docker Compose.
- Объявите переменную окружения
-
CONFIG_PATH_DOCKER=<путь_до_конфигурационного_файла>
- Создайте конфигурационный файл по указанному ранее пути с данной структурой
[server] port = ":<порт_сервера>" log_level = "<уровень_логирования>(debug/info/error)" session_key = "<секретный_ключ_jwt>" token_ttl = "<время_истечения_токена>" [value_database] host = "<имя_хоста_базы_данных_значений>" port = ":<порт_базы_данных_значений>" [user_database] def_user="<имя_первого_пользователя>(место для вставки пользователя из технического задания)" def_passwd="<пароль_первого_пользователя>(место для вставки пароля пользователя из технического задания)" host = "<имя_хоста_базы_данных_пользователей>" port = ":<порт_базы_данных_пользователей>"
-
Запуск приложения:
docker-compose up -d
Эта команда запустит как Tarantool'ы, так и API сервис в контейнерах Docker.
-
Доступ к API: API будет доступен по адресу
http://localhost:8081
.
Интеграционные тесты для всех эндпоинтов API находятся в каталоге tests/
. Для запуска тестов выполните:
- Замениет путь на путь до конфигурационного файла для тетов (с тестовыми бд)
CONFIG_PATH_DOCKER=<путь_до_конфигурационного_файла>
- Создайте в папке
tests/endpoint_test/
по такому же пути что вы указали в CONFIG_PATH_DOCKER, абсолютно такой же файл что и в конфигурации - Запустите docker-compose вот таким образом:
docker-compose exec api go test ./tests/...