Реализовать suggest сервис, обрабатывающий POST запрос по следующему URI: /v1/api/suggest
.
Клиент отправляет POST запрос следующего формата:
{
"input": "hel"
}
В поле input
находится часть текста, который клиент хочет ввести.
На данный запрос сервис должен предложить варианты того, что клиент возможно хочет ввести.
Пример ответа:
{
"suggestions": [
{
"text": "hello",
"position": 0
},
{
"text": "hello world",
"position": 1
},
{
"text": "helm",
"position": 2
}
]
}
В случае если сервису нечего предложить он возвращает пустой массив suggestions
.
Сервис варианты ответа считывает при инициализации и обновляет в ходе работы
из конфигурационного файла suggestions.json в коллекцию suggestions
.
Обновление коллекции suggestions
происходит каждые 15 минут из того же файла.
Пример содержимого фала suggestions.json:
[
{
"id": "hel",
"name": "hello world",
"cost": 70
},
{
"id": "hel",
"name": "hello",
"cost": 10
},
{
"id": "hel",
"name": "helm",
"cost": 200
}
]
Для синхронизации доступа к коллекции suggestions
стоит использовать std::shared_mutex
.
Read блокировка осуществляется в коде обработчика, а Write блокировка в функции обновления коллекции suggestions
.
Поле cost
определяет значение поля position
: чем больше cost
тем меньше значение position
.
(чем ниже стоимость, тем выше вариант)
- для реализации HTTP сервера используйте готовые библиотеки
- в пакетном менеджере hunter есть несколько библиотек для работы с сетью. Например, Boost.Beast
- у хороших библиотек есть наглядные примеры работы с этими библиотеками. Например, простой синхнорнный http сервер на основе Boost.Beast
- тестирование сервера выполнить с помощью утилиты curl (документацию с примерами можно найти здесь).