Настройка проекта, разработка API категорий и продуктов
Мотивация
На мой взгляд, лучший способ научиться программированию – это создать реальный проект, который имеет практическое применение, таким образом, весь процесс обучения становится довольно захватывающим. Кроме того, вы можете продемонстрировать свое приложение в своем портфолио, что может вам очень помочь, если вы хотите получить работу фрилансера или пройти собеседование.
В этой серии блогов вы улучшите свои навыки разработки, научившись создавать платформу электронной коммерции с нуля. Во-первых, вы должны быть знакомы с Java и Spring Boot, которые мы будем использовать для создания серверной части, и Vue.js , который мы будем использовать для внешнего интерфейса.
Примечание для читателя:
Хотя я создал все приложение и написал серию учебных пособий , которые довольно популярны и лидируют в результатах Google, которыми я очень горжусь (более 130 тысяч просмотров только в среде)
Позже я обнаружил, что в этих учебных пособиях отсутствуют некоторые части, а некоторые учебные пособия больше не актуальны. Например, в некоторых учебных пособиях мы использовали vanilla JS, а также начали разрабатывать приложение для Android , от которого позже отказались.
Итак, это моя попытка переделать учебные пособия, удалив/отредактировав некоторые части, которые больше не актуальны, и создав некоторые учебные пособия, которые охватывают недостающие части, поэтому пользователям будет очень легко следовать учебным пособиям.
Видеоурок
Список воспроизведения
Внешний интерфейс
Бэкэнд
Учебник по интерфейсу в Vue
Давайте разработаем приложение для электронной коммерции с нуля, используя Spring Boot и Vue.js
Нулевой Мадхаб ・ 30 октября ・ 11 минут читать
Создание проекта
Во-первых, перейдите в Во-первых, перейдите в
где мы можем создать новое приложение spring и добавить зависимости Выберите maven, добавьте JPA для данных Spring
- Нажмите кнопку Создать и загрузите zip-файл, распакуйте его и откройте с помощью IntelliJ Idea
Структура проекта
Основной класс
Папка src/main/java проекта содержит класс, у которого есть метод main. Это точка входа для приложения.
Это точка входа для приложения.
В папке src/main/ресурсы будет файл с именем application.properties . Этот файл будет играть важную роль в передаче spring конфигураций, которые мы создаем, и того, как он должен создавать объект для нас. Другими словами, он играет важную роль в Инверсия контроля (IoC) .
Другими словами, он играет важную роль в || Инверсия контроля (IoC) ||.
В папке проекта будет файл с именем pom.xml
. В этот файл мы будем добавлять все необходимые зависимости.
Теперь структура проекта будет такой, как показано ниже-
Вы можете проверить структуру проекта серверной части в ветке репозитория GitHub, приведенной ниже- GitHub — webtutsplus/электронная коммерция
Обзор нашего серверного приложения
В этом весеннем приложении ниже приведены важные пакеты, которые вы должны знать перед началом работы.
Это весенняя архитектура. Внешний мир вызывает API REST , которые взаимодействуют с контроллером , который взаимодействует со Службой. Служба вызывает репозиторий.
Хранилище взаимодействует с базой данных. Мы следуем этому шаблону, чтобы сделать базу кода поддерживаемой, вместо того, чтобы использовать код спагетти, который в долгосрочной перспективе может стать кошмаром.
Модель/Сущность
Модель – это базовая сущность, которая имеет прямую связь со структурой таблицы в базе данных . Другими словами, эти модели служат контейнерами, содержащими аналогичные и относительные данные, которые используются для передачи этих данных от клиентов в базу данных. Профиль пользователя, продукт и категория – это некоторые модели в нашем внутреннем приложении.
Хранилище
Репозиторий – это интерфейс, который действует как мост между базой данных и приложением. Он переносит данные модели в базу данных и из нее. Каждая модель будет иметь уникальное хранилище для передачи данных.
Услуга
Сервис – это часть архитектуры, в которой создается экземпляр репозитория и применяется бизнес-логика. Данные от клиента, поступающие сюда, обрабатываются и отправляются через репозиторий в базу данных.
Контроллер
контроллер – это часть архитектуры, в которой сначала обрабатываются запросы от клиентов. Он управляет процессами, которые должны выполняться на серверной части, и ответом, который должен быть получен клиентами. Он взаимодействует со службой, которая, в свою очередь, взаимодействует с хранилищем, которое, в свою очередь, взаимодействует с базой данных с использованием моделей.
Путешествие данных
Разработка API категории
Как только у нас будет готова базовая структура, пришло время добавить некоторые товары и категории для нашего магазина электронной коммерции.
Возьмем в качестве примера, у нас может быть категория обуви и разные типы обуви в качестве продукта. Таким образом, в одной категории может быть много товаров, но каждый товар будет принадлежать к одной категории.
Модель
Сначала мы создадим модель, Категория в ней будет четыре поля.
идентификатор
название категории
описание
Изображение
Мы также создадим сеттер и геттер для четырех полей.
Он будет иметь соответствующие категории таблиц в базе данных
javax.validation validation-api
Хранилище
Теперь мы создадим хранилище Categoryrepository.java это расширит JpaRepository.
У него будет имя метода findByCategory.
Услуга
Теперь мы создадим файл службы категорий, который будет отвечать за создание, обновление или извлечение репозиториев.
В Categoryrepository есть встроенные методы Findall(), save(), поскольку он расширяет JpaRepository
Контроллер
Мы создадим вспомогательный класс ApiResponse.java, который будет использоваться для возврата ответа для API.
Мы создадим 3 API для категории
творить
обновление
перечислить все категории
Мы также добавим swagger для удобства тестирования кода. Нам также нужно добавить эти зависимости в pom.xml файл для swagger и h2 в базе данных памяти. Но вы можете выбрать любую другую базу данных по своему выбору.
io.springfox springfox-bean-validators 2.9.2 io.springfox springfox-swagger2 2.9.2 io.springfox springfox-swagger-ui 2.9.2 com.h2database h2 runtime
Мы также должны изменить наш файл application.properties, добавив строки
spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
Теперь запустите код и откройте http://localhost:8080/swagger-ui.html страница. Мы увидим этот экран
Демонстрация
Давайте создадим часы категории с этим телом запроса. (Примечание: нам не нужно передавать идентификатор здесь, он будет создан автоматически.)
{ "categoryName": "watches", "description": "best watches", "imageUrl": "https://images.unsplash.com/photo-1524805444758-089113d48a6d?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=634&q=80" }
Вы получите ответ, как показано ниже-
А теперь давайте приступим к делу интерфейс прикладного программирования
Мы получим следующий ответ-
[ { "id": 1, "categoryName": "watches", "description": "best watches", "imageUrl": "https://images.unsplash.com/photo-1524805444758-089113d48a6d?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=634&q=80" } ]
Включить CORS
Мы добавим webconfig.java файл, чтобы наш интерфейс мог попасть в API.
Ура! Теперь мы можем играть с API-интерфейсами и создавать новые категории, обновлять и извлекать все категории.
Разработка API продукта
Теперь у нас есть несколько категорий, пришло время сделать продукты API. Сначала мы создадим модель, затем создадим репозиторий, затем создадим сервис и в конце создадим контроллер и протестируем его.
Модель
Продукт будет иметь идентификатор, название, URL-адрес изображения, цену, описание, а также внешний ключ к категории, так как каждый продукт относится к категории.
@Entity @Table(name = "products") public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private @NotNull String name; private @NotNull String imageURL; private @NotNull double price; private @NotNull String description; @JsonIgnore @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "category_id", nullable = false) Category category; public Product(String name, String imageURL, double price, String description, Category category) { super(); this.name = name; this.imageURL = imageURL; this.price = price; this.description = description; this.category = category; } // setters and getters }
Хранилище
Далее мы создадим файл, ProductRepository.java в пакете репозитория, который просто расширит JpaRepository . Если нам понадобятся какие-то методы, мы добавим их позже
package com.educative.ecommerce.repository; import com.educative.ecommerce.model.Product; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface ProductRepository extends JpaRepository{ }
Услуга
Теперь мы готовы создать класс обслуживания. Создайте файл ProductService.java в справочнике служб. У него будет автоматически подключаемый продукт.
@Service public class ProductService { @Autowired private ProductRepository productRepository; }
К концепции#
Прежде чем создавать продукт, нам нужно понять, что такое DTO (объект передачи данных)
Мартин Фаулер представил концепцию объекта передачи данных (DTO) как объекта, который переносит данные между процессами.
В контроллере категории мы напрямую использовали модель в качестве тела запроса, но во многих случаях это непрактично. Нам нужно создать другой объект, потому что
иногда нам может потребоваться изменить модель, и мы не хотим менять API для обратной совместимости
Мы не можем использовать модель в качестве тела запроса, если она связана с другой моделью.
Так быстро мы создадим пакет дто а внутри упаковки мы создадим другой упаковочный продукт, и там мы создадим наш ProductDto.java класс, который будет иметь следующие атрибуты
private Integer id; private @NotNull String name; private @NotNull String imageURL; private @NotNull double price; private @NotNull String description; private @NotNull Integer categoryId;
Мы также передаем идентификатор категории, потому что это нужно для связи продукта с категорией.
Контроллер
Теперь, когда у нас готов продукт, пришло время создавать ProductController.java класс
@RestController @RequestMapping("/product") public class ProductController { @Autowired ProductService productService; @Autowired CategoryService categoryService; }
Он будет автоматически подключать Обслуживание продуктов и Обслуживание категорий
Создайте новый API продукта
@PostMapping("/add") public ResponseEntityaddProduct(@RequestBody ProductDto productDto) { Optional optionalCategory = categoryService.readCategory(productDto.getCategoryId()); if (!optionalCategory.isPresent()) { return new ResponseEntity (new ApiResponse(false, "category is invalid"), HttpStatus.CONFLICT); } Category category = optionalCategory.get(); productService.addProduct(productDto, category); return new ResponseEntity<>(new ApiResponse(true, "Product has been added"), HttpStatus.CREATED); }
Мы получим идентификатор категории и сведения о продукте из тела запроса.
Сначала мы проверим, является ли идентификатор категории действительным или вернем ошибку “категория недопустима”.
Затем мы создадим продукт, вызвав метод ProductService.addProduct, который принимает productDto и категорию в качестве аргументов.
public void addProduct(ProductDto productDto, Category category) { Product product = getProductFromDto(productDto, category); productRepository.save(product); } public static Product getProductFromDto(ProductDto productDto, Category category) { Product product = new Product(); product.setCategory(category); product.setDescription(productDto.getDescription()); product.setImageURL(productDto.getImageURL()); product.setPrice(productDto.getPrice()); product.setName(productDto.getName()); return product; }
Полный код можно найти в репозитории GitHub, приведенном ниже- GitHub — webtutsplus/электронная коммерция в продуктах-api
И это знаменует собой конец этого урока. Но подождите! Серия учебных пособий будет продолжена для создания пользовательского интерфейса с использованием Vue.js для разработанного выше серверного приложения. А до тех пор оставайтесь с нами!
Счастливого Обучения
Перейдите к следующему уроку, где мы будем использовать API для создания интерфейса с использованием vue.js
Перейдите к следующему уроку, где мы будем использовать API для создания интерфейса с использованием vue.js
Оригинал: “https://dev.to/nilmadhabmondal/lets-develop-an-e-commerce-application-from-scratch-using-java-and-spring-28go”