anguage: Russian Perflib | English
Краткое описание как запустить через docker
- Конечно же скачать сам докер (с этим возможно могут быть проблемы на винде)
- В папке проекта открыть командную строку и ввести:
docker build -t gorse-perflib .
- После того как оно закончило собирать образ, нужно ввести:
docker run -d -p 8050:8050 gorse-perflib
. Это запустит приложение на фоне
Чтобы остановить образ: docker image ls
, найти "IMAGE_ID" и ввести docker container stop "IMAGE_ID"
Если надо будет удалить образ (по каким-либо причинам), то нужно ввести:
docker image ls
, найти "IMAGE ID" нужного образа и ввести docker image rm "IMAGE_ID" --force
В случае если захочется самому запустить на своей машине это всё дело, можно глянуть в сам докерфайл
Сервис общается только по http протоколу и через json
Обновление модели рекомендации по дефолту идёт раз в 5 секунд, настраивается в конфигах
Эндпоинты:
Сервис на 0.0.0.0 адрес по дефолту (localhost/www), так что сервер может быть даже открытым для интернета,
если порты открыты на хосте.
Дефолтный порт: 8050
Все эндпоинты которые выдают что-то имеют параметр number
, в котором можно указать кол-во возвращаемого результата
К примеру: localhost:8050/popular?number=1
выдаст самый популярный предмет (и только один), если number=2 то первые 2 и т.д
В сервис можно засовывать как и id, так и string имена юзеров/предметов, но feedback (далее будет об этом)
принимает только string во всех параметрах.
К примеру, нельзя сделать параметр ItemId
при добавлении предмета/юзера int-овым, будет ошибка.
Скорее всего позже я это пофикшу как будет возможность
Все JSON идут в множественном формате (как принимающие, так и отправляющие), т.е они все оборачиваются в []
Сами эндпоинты:
/popular
- возвращает список популярных предметов
/recommends/{user-id}
- не требует тела json, требует user-id, возвращает рекомендации для конкретного пользователя
user-id может быть как и строка, так и id, не имеет разницы
Формат возвращаемого json:
{
"ItemId":"string",
"Popularity": int,
"Timestamp": "instant"
"Score": int
}
P.S: Popularity, может быть > 1, пока не уверен что float
Timestamp пока что не разобрался зачем нужен, так что лучше игнорьте (формат его: 0001-01-01T00:00:00Z
)
Score это число от 0 до 1, float, представляет из себя счёт конкретной рекомендации для конкретного пользователя
/feedback
- требует тела json, добавление предметов, юзеров в сервис
Здесь есть одна оссобенность, юзер добавляется сразу вместе с сущностью которую он открыл
То есть, нельзя добавлять юзера без сущности
Формат добавления через json:
{
"UserId":"id",
"ItemId":"id",
"Feedback":float,
}
P.S Feedback может быть больше 0, float'ом и как я понял, если мы говорим о просмотрах пользователя, это кол-во добавляемых просмотров пользователя.
/random
- не требует тела json, пока не до конца понял цели этого,
так как оно даёт одинаковые результаты, но оно выдаёт сущности в таком же формате что и рекомендации
/popular
- не требует тела json, выдаёт самые популярные предметы (по всем пользователям),
выдаёт результаты в том же формате что и эндпоинт рекомендаций
/users
- не требует тела json, выдаёт всех пользователей учтённых в сервисе
формат вывода json:
[
"user1",
"user2",
"..."
]
/user/{user-id}/feedback
- получить все вложения в сервис рекомендации от конкретного пользователя
формат вывода json:
[
{
"UserId":"username",
"ItemId":"id",
"Rating": int
}
]
P.S Rating и представляет из себя feedback, здесь он выдаётся в формате int
/items
- получить все предметы, сохранённые в сервисе рекомендаций
формат вывода json:
[
{
"ItemId":"id",
"Popularity": int,
"Timestamp": "instant"
}
]
В сервисе ещё остались парочку эндпоинтов, но думаю для начала хватит и этих
Если понадобятся другие, то можно глянуть на них в файле cmd/rest.go