Приложение JSON RPC 2.0 API сервис разработан в рамках тестового задания.
Вызовы API функций приложения происходят с использованием протокола HTTP и JSON RPC, пример:
--> {"jsonrpc": "2.0", "method": "Api.GetNumber", "params": [], "id": 1}
<-- {"result": 0, "id": 1}
Api.GetNumber
- Текущее значение счетчикаApi.IncrementNumber
- Увеличение счетчикаApi.SetSettings
- Установка максимального значения счетчика и значения приращения
Все настройки задаются через переменые окружения.
Настройки HTTP сервера приложения:
- APP_HOST - хост HTTP сервера (по умолчанию: 127.0.0.1)
- APP_PORT - порт HTTP сервера (по умолчанию: 8080)
- APP_API_PATH - путь URI для вызова API (по умолчанию: /api)
Настройки БД приложения:
- DB_HOST - хост базы данных (по умолчанию: 127.0.0.1)
- DB_PORT - порт БД (по умолчанию: 3306)
- DB_USER - пользователь БД (по умолчанию: root)
- DB_PASS - пароль для подключения к БД (по умолчанию:)
- DB_NAME - название базы данных (по умолчанию: swetask)
- DB_COLT - кодирока БД (по умолчанию: utf8_general_ci)
В качестве БД рекомендуется к использованию современная СУБД MySQL - MySQL/MariaDB
В приложение сервиса встроен менеджер миграций на базе проекта Goose.
Для работы с менеджером миграций необходимо выполнить команду:
./swetaskrpc migrate
- будет напечатана справка по работе с миграциями.
Краткое описание директорий
docker
- директория для Docker файлов используемых при развертке приложенияmigrations
- SQL (MySQL) файлы для исполнения миграцийsrc
- исходный код приложения
Для сборки необходимо клонировать данный репозиторий на ПК или сервер:
git clone https://github.com/stormdynamics/swerpctask.git
- Установить GoLang не ниже версии 1.14
- Выполнить команду -
go mod download
- Выполнить команду -
go build
Выполнить команду:
docker-compose -f docker-compose.yml up -d --build
Для основного приложения используются следующие зависимости:
- драйвер MySQL -
github.com/go-sql-driver/mysql
- менеджер миграций -
github.com/pressly/goose
Для тестов используются зависимости:
- макеты(mockup) БД -
github.com/DATA-DOG/go-sqlmock