Shop-API
Описание
RESTful Shop API на Java с PostgreSQL и Swagger
Языки
- Markdown100%
REST API для магазина бытовой техники.
Проект реализован на Java и предоставляет бэкенд-часть для дальнейшего подключения веб-, desktop- или мобильных клиентов.
API спроектирован в соответствии с RESTful-подходом, использует PostgreSQL, DTO, Repository pattern, покрыт Swagger спецификацией.
Возможности API
-
Клиенты
- Добавление клиента
- Удаление клиента по id
- Получение клиентов по имени и фамилии
- Получение списка всех клиентов
- поддержка пагинации (limit, offset)
- Обновление адреса клиента
-
Товары
- Добавление товара
- Уменьшение количества товара на складе
- Получение товара по id
- Получение всех доступных товаров
- Удаление товара
-
Поставщики
- Добавление поставщика
- Изменение адреса поставщика
- Удаление поставщика
- Получение всех поставщиков
- Получение поставщика по id
-
Изображения товаров
- Загрузка изображения товара
- Обновление изображения
- Удаление изображения
- Получение изображения по id
- Получение изображения конкретного товара
Запуск проекта
Требования
- Java 21+
- PostgreSQL установлен и запущен
- Установлен Gradle (или использовать встроенный wrapper
)./gradlew
Создание базы данных
- перейти в каталог src/ShopAPI/src/
- запустить скрипт создания базы sudo -u postgres bash create_db.sh
Postman коллекция и окружение лежат в
База данных должна соответствовать принципу 3НФ:
- атомарность значений (одно значение в ячейке, нет массивов или списков в одной колонке) и отсутствие повторяющихся групп (1НФ);
- все неключевые атрибуты зависят от всего первичного ключа, а не от его части, например, в нашем случае адреса хранятся в отдельной таблице, а не в таблице поставщиков (2НФ);
- неключевые атрибуты не зависят друг от друга (3НФ).
Прослойка "репозиторий"
- инкапсулирует доступ к БД,
- скрывает SQL от бизнес-логики,
- выполняет CRUD-операции, предоставляет методы работы с сущностями.
Благодаря JpaRepository получаем готовые методы для CRUD-операций.
Прослойка "контроллер"
Входная точка АПИ. Не содержит бизнес-логики и служит связующим звеном между клиентом и сервисным слоем.
- принимают HTTP-запросы,
- читают параметры, path, body,
- запускают валидацию (@Valid),
- вызывают сервисы,
- возвращают HTTP-ответ.
Модель
- отражает сущности БД,
- напрямую маппится на таблицы БД,
- содержит JPA аннотации.
Прослойка "DTO"
DTO - модели передачи данных через API.
RequestDto - входные данные
ResponseDto - выходные данные
Используются в запросах и ответах.
DTO используются для передачи данных между клиентом и сервером и позволяют изолировать доменную модель от внешнего API.
Прослойка "mapper"
Мапперы преобразуют Entity <=> DTO (явная трансформация). Выносят маппинг из контроллеров, упрощают поддержку.