Цель - реализовать простой и удобный движок для обменников криптовалют.
Язык, на котором написан движок - Kotlin. Он быстро работает и имеет удобные функции, которые часто нужны (filter, map). Также в нем есть поддержка потоков, это позволяет сделать одновременную загрузку курсов с нескольких бирж.
Основные функции:
Сайт и админка - это отдельный проект. Он реализован на React и JavaScript. Но вы можете выбрать любой другой язык.
API создавалось с учетом принципов REST. Я старался сохранить тот же маршрут, например /api/options
, но добавить несколько методов: GET для чтения данных с сервера, PUT для добавления новых записей, POST для обновления существующих и DELETE для удаления.
Метод GET доступен всем, кто может заходить в панель управления.
PUT, POST, DELETE - только для ролей, которые имеют соответствующие права.
Также есть маршруты с методом GET, которые открыты всему миру. Их можно открывать без прохождения аутентификации (не нужно вводить логин и пароль и получать cookie). Подробнее о правах..
Ответ на запрос всегда отправляется в формате JSON.
{
"type": "error",
"message": "An unexpected server error occurred",
"data": null,
"action": null
}
type
: error
/ warning
/ success
;message
: сообщение для пользователя об ошибке или об успешном выполнении;data
: полезная нагрузка (ответ на запрос);action
: какую страницу нужно открыть. например, если нужно показать форму входа, то LOGIN
.Если это предусмотрено маршрутом, data
может быть разбит на страницы.
{
"total": 100,
"page": 1,
"pageSize": 25,
"items": []
}
У каждого маршрута могут быть разные HTTP-коды. Общее правило:
type
: success
.type
: warning
.type
: error
, коды 4хх или 500.При отправке запросов на редактирование (PUT, POST, DELETE) в лог-файле делается отметка - какой пользователь и в какое время это сделал.
Если в работе приложения возникли проблемы, можно включить отладку в файле logback.xml
. Для этого в конце файла level="info"
нужно заменить на level="debug"
:
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
Применяется популярная библиотека log4j. Файлы хранятся в папке logs. Каждый день создается новый файл. Можно выбрать другой интервал или сжимать их в архив.