К REST контроллеру был добавлен OpenApi Swagger. По соответствующим урлам можно посмотреть документацию по данному сервису.
http://localhost:8080/v1/swagger
Для хранения данных использовалась субд Postgresql.
Для импорта дампа википедии был написан скрипт import_data.py
на Python, т.к. это было очень быстро и удобно.
Для контейнеризации был использован Docker. В корне проекта находится файл docker-compose.yml
, который разворачивается на localhost три контейнера.
В первом контейнере находится образ субд Postgresql, во втором крутится REST API сервис по поиску статьи, а в третьeм один раз выполняется скрипт по заполнению данных в первый контейнер. :)
По смысловой составляющей было реализовано:
- Получение статьи в формате single line json
- Получение статьи в формате pretty json
- Вывод статистики по количеству статей для каждой категории (в формате json)
- Редактирование (замена на новые данные) полей статьи (timestamp записывается от now())
- С визуализацией на HTML странице немного не успел по дедлайну, но я её доделаю в ближайшее время.
Ссылка на проект на github: github.com/Imsamaboy/wiki-service
Только там нету дампа вики, т.к. данные слишком большого размера.
- Распокавать архив с решением
- В корне проекта, где находится файл
docker-compose.yml
открыть терминал - в терминале прописать
docker-compose build --no-cache
- после билда прописать
docker-compose -f docker-compose.yml up
После данных действий всё приложение развернётся на вашей системе и можно будет совершать запросы к сервису поhttp://localhost:8080/wiki/...
- не установлен Docker
- не установлен docker-compose
- вы не залогинены в терминале и надо прописать
docker login
- порты 8080 или 5432 уже находятся в использовании другими сервисами
- Ошибка рода:
docker.credentials.errors.StoreError: Credentials store docker-credential-desktop exited with "error listing credentials - err: exit status 1...
Решение: надо зайти в папку.docker
и поменять в файлеconfig.json
полеcredsStore
наcredSstore
и сохранить изменения и выполнить ещё разdocker login
.
Telegram: @Sfelshtyn