Требуется только backend часть, простой проект на спринге с in-memory базой(но лучше персистентной конечно, к самой базе данных ограничений нет) и парой ручек ## Проект DogApi ### Проект будет представлять из себя приложение, предоставляющее пользователю следующий функционал: * Просмотр списка пород собак * Получение случайного изображения собаки конкретной породы * Сохранение понравившегося изображения в список “Понравившихся“ * Получение всего списка “Понравившихся“ изображений собак ### Структурно проект будет состоять из 2 основных компонент: * Backend приложение, реализованное при помощи фреймворка Spring * Android приложение, реализованное при помощи Android SDK ### Коммуникация между компонентами будет реализовано посредством протокола REST со следующим контрактом: *@GET /{base_url}/breeds - получение списка пород ```json { “breeds“: [ “stbernard“, “sharpei“ ] } ``` * @GET /{base_url}/{breed}/random - получение случайного изображения ```json { “image_url“: “https://images.dog.ceo/breeds/hound-afghan/n02088094_907.jpg“ } ``` * @POST /{base_url}/favorite ```json { “username“: “username“, “image_url“: “https://images.dog.ceo/breeds/hound-afghan/n02088094_1186.jpg“ } ``` * @GET /{base_url}/{username}/favorites ```json { “breeds“: [ { “name“: “hound-afghan“, “images“: [ “https://images.dog.ceo/breeds/hound-afghan/n02088094_1186.jpg“, “https://images.dog.ceo/breeds/hound-afghan/n02088094_1724.jpg“, “https://images.dog.ceo/breeds/hound-afghan/n02088094_3582.jpg“ ] } ] } ``` ### Стороннее API Для получения списка пород и случайного изображения собаки конкретной породы будет использовано стороннее API [dog.ceo](https://dog.ceo/dog-api/documentation/): * Получение списка пород `https://dog.ceo/api/breeds/list/all` * Получение случайного изображения собаки конкретной породы `https://dog.ceo/api/breed/{breed}/images/random` ### Базы Данных Функционал сохранения изображения в “Понравившееся“ и получения списка всех “Понравившихся“ изображений будет реализован без использования стороннего API. Данная информация будет храниться и обновляться посредством взаимодействия Backend приложения с удаленной базой данных ### Логирование/Мониторинг TBD ### Тестирование TBD.