/solar-test-task

Тестовое задание от компании Солар

Primary LanguageClojure

solar-test-task

Description

Разработать веб-сервис поиска по заданным ключевым словам через внешний веб-сервис. Необходимо разработать сервис, реализующее следующую получение статистики по вопросам на StackOverflow:

  • Обслуживать HTTP запросы по URL "/search". В параметрах запроса передается параметр "tag", содержащий ключевой тэг для поиска. Параметров может быть несколько, в этом случае мы работаем с несколькими ключевыми тэгами. Пример "http://localhost:8080/search?tag=clojure&tag=scala". Предполагаем, что клиент будет передавать только алфавитно-цифровые запросы в ASCII. Однако, наличие корректной поддержки русского языка в кодировке UTF-8 будет плюсом.
  • Сервис должен обращаться к 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=clojure&site=stackoverflow. Можно использовать любые дополнительные параметры запроса, если это необходимо.
  • В результатах поиска интересует полный список тегов (поле tags) по каждому вопросу, а также был ли дан на вопрос ответ.
  • В результате работы запроса должна быть возвращена суммарная статистика по всем тэгам - сколько раз встречался тег во всех вопросах и сколько раз на вопрос, содержащий тэг, был дан ответ.
  • Результат должен быть представлен в формате JSON. Выдача ответа с человеко-читаемым форматированием (pretty print) будет рассматриваться как плюс. Пример ответа:
{
 "clojure": { "total": 173, "answered": 54},
 "python": { "total": 100, "answered": 9}
 "clojurescript": { "total": 193, "answered": 193}
 }

Использование сторонних компонентов

Можно использовать любые open-source компоненты, доступные на clojars или maven central. Можно использовать любое средство разработки веб-приложений, например сервлеты, spring mvc, jax-rs, ring и т.п. Приветствуются короткие решения, использующие сторонние компоненты.

Ожидаемый результат

Необходимо представить исходные тексты приложения. Приложение:

  • Должно компилироваться и работать.
  • Должно собираться однострочной командой при помощи maven, lein или другого средства сборки, которое легко развернуть.
  • Должно запускаться одной командой. Например через lein run или аналогичное средство.
  • Должно запускаться без необходимости отдельно разворачивать сервер приложений.
  • Веб-интерфейс для сервиса не обязателен.

Prerequisites

You will need Leiningen 2.0.0 or above installed.

Running

To start a web server for the application, run:

lein ring server

Result

alt text

alt text

License

Copyright © 2022 Ivana