Приложение запускается стандактным для NET CORE 3.1 образозом. Работоспособность можно проверить при помощи тесов в проекте KalugaTest либо через Swager(http://localhost:5000/index.html) инрерфейс(Передав ключевые слова через ,) Работа с http реализованна через IHttpClientFactory где создается именнованный пул соединений. Настройки прилодения указанны в фйале appsettings.json секция Settings Условие "Должно быть ограничение на максимальное количество одновременных HTTP-соединений" - реализуется при помощи конфигурирования именнованного httpClient в методе ServicesExt.AddKeywordsService путкм задания MaxConnectionsPerServer=Settings.StackExchangeMaxConnections Запросы распаралеливаются по алгоритму: Колекция ключевых слов приводится к единому регистру удаляюся дубликаты слов и все что осталось помещается в потоко безопасную очередь Расчитывается число http запросов которые будут исполнятся одновременно которые будут исполнятся (int httpWorkersCount = Math.Min(config.StackExchangeQueueMaxSize, keywords.Length);) Запускаются задачи httpWorkersCount которые берут из очереди слова и отправляю запросы. Аккамулирую результаты ответов. Если происходит сбой все задачи отменяются кидается исключение(повторные попытки в алгоритме не реализованны) Ждем завершения всех задач и аккумилируем результаты запросов Сортируем запросы по дате создания (хотел добавить удаление повторяющихся елементов но незнаю нужно ли) Замечания
!Мое время ограничено не могу себе позволить улучшать это решение и добавлять некоторые полезные вещи (Напремер я намеренно не стал реализовывать логирование)
!Скорее всего чтото сделал не так так как до конца не понял задание и незнаком с тонкостями работы этого api.
!Тесты покрывают не все кейсы
!Для скорости сделал интеграционные тесты на NUnit в том же проете лучше их разнести в разные проеты.
!
Задание : Реализовать сервис, обращающийся к REST API StackOverflow для поиска по ключевым словам (документация по API https://api.stackexchange.com/docs/search). В случае, если ключевых слов передано больше одного, запросы должны выполняться параллельно (по одному HTTP запросу на ключевое слово). Должно быть ограничение на максимальное количество одновременных HTTP-соединений, это значение нельзя превышать. Если ключевых слов указано больше, необходимо организовать очередь обработки так, чтобы более указанного количество соединений не открывалось. По каждому тэгу производится поиск только первых 100 записей, отсортированных по дате создания. Пример запроса к API: https://api.stackexchange.com/2.2/search?pagesize=100&order=desc&sort=creation&tagged=csharp&site=stackoverflow. Можно использовать любые дополнительные параметры запроса, если это необходимо. Для разработки рекомендуется использовать .Net Core. Преимуществом будет обладать задание, запускаемое в Docker контейнере. Должно быть краткое readme с описанием функционала и требований по запуску программы.