Проект представляет из себя два Docker-контейнера. Один из них содержит базу данных Reindexer, а другой - WebAPI. Они запускаются с помощью Docker Compose. Есть три сущности: company, man и tip. Tip относится к какому-то man, а man в свою очередь относится к какому-то company. Реализованы операции CRUD над этими документами. У метода GET есть пагинация. Реализовано рекурсивное удаление документов. Используется фреймворк Gin, потому что он поддерживает промежуточное ПО, с ним легко работать со сбоями, легко реализовать авторизацию. Кэширование документов реализовано посредством BigCache. Использовать Redis и развертвать его в отдельном контейнере не увидел смысла, потому что что Redis, что используемый Reindexer используют для хранения данных оперативную память, поэтому будут иметь примерно одинаковое время отклика. Ради того, чтобы добиться уменьшения времени отклика, данные хранятся в памяти самого приложения. Реализовано кэширование документов и параллельная обработка запросов на выдачу множества документов. Приложение завернуто в докер-контейнер. Контейнер с веб-сервисом загружен на DockerHub.
На компьютере должен быть установлен и запущен Docker.
Скачайте файл docker-compose.yml в удобное место на компьютере. В директории нахождения файла откройте терминал и введите команду docker-compose up
Конечные точки для тестирования с помощью Postman (или другого удобного инструмента):
Company:
- POST http://127.0.0.1:8080/company
- GET http://127.0.0.1:8080/companies?limit=10&offset=0
- GET http://127.0.0.1:8080/company/:id
- PATCH http://127.0.0.1:8080/company/:id
- DELETE http://127.0.0.1:8080/company/:id
Man:
- POST http://127.0.0.1:8080/man
- GET http://127.0.0.1:8080/men?limit=10&offset=0 //множественное число - "men"
- GET http://127.0.0.1:8080/man/:id
- PATCH http://127.0.0.1:8080/man/:id
- DELETE http://127.0.0.1:8080/man/:id
Tip:
- POST http://127.0.0.1:8080/tip
- GET http://127.0.0.1:8080/tips?limit=10&offset=0
- GET http://127.0.0.1:8080/tip/:id
- PATCH http://127.0.0.1:8080/tip/:id
- DELETE http://127.0.0.1:8080/tip/:id
Вместо :id нужно подставить идентификатор документа
Схемы документов (для того, чтобы по ним создавать свои json для HTTP-запросов) представлена в данном репозитории в директории assets