Реализовать 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 (документацию с примерами можно найти здесь).