Здравствуйте! Сегодня мы узнаем, как создать базовый API электронной коммерции с помощью Quarkus. Если вы новичок в Quarkus, это родной для Kubernetes стек Java, специально созданный для виртуальных машин Java (JVM) и собственной компиляции. Это очень быстро, и вам это понравится!

Чтобы объяснить нашу архитектуру, мы будем использовать инструмент под названием Mermaid, который помогает нам создавать красивые диаграммы с помощью простых текстовых определений.

Почему Кваркус?

Основные преимущества Quarkus

  1. Kubernetes-Native: Quarkus был разработан с учетом контейнеризации и оркестровки. Он легкий и легко обрабатывает настройки портов, что делает его идеальным для Kubernetes и других облачных сред.
  2. Сверхбыстрое время запуска и меньшее время выполнения. Благодаря Quarkus вы получаете молниеносное время запуска и меньшее потребление памяти во время выполнения, что важно для архитектур «функции как услуга» и микросервисов, где службы должны запускаться и останавливаться быстро.
  3. Унифицированная конфигурация: все конфигурации объединены в один файл, что устраняет путаницу с несколькими конфигурациями и упрощает работу разработчиков.
  4. Живое кодирование: это мой личный фаворит! Функция живого кодирования Quarkus, доступная при запуске ваших проектов в режиме Quarkus Dev, повышает производительность разработчиков. Вы можете вносить изменения в свою кодовую базу и сразу же видеть их влияние, не перезагружая сервер вручную.
  5. Императивность и реактивность: Quarkus объединяет императивную модель программирования с реактивными принципами, позволяя вам выбрать лучший инструмент для поставленной задачи без ущерба для архитектурного видения.
  6. Собственный режим и режим JVM: приложения Quarkus можно запускать в режиме JVM и в собственном режиме. Собственный режим компилирует приложение в собственный исполняемый файл, который имеет более быстрое время запуска и меньшую нагрузку на память во время выполнения, что может быть огромным преимуществом для бессерверных приложений и микросервисов.

Тесты производительности Quarkus

Что касается бенчмарков, то они могут варьироваться в зависимости от множества факторов, включая характер приложения, конфигурацию сервера и т. д. Но чтобы дать вам общее представление, вот несколько цифр из исследования, проведенного RedHat:

  1. Время запуска. Простое приложение REST на Quarkus может запуститься менее чем за 0,8 секунды, в то время как традиционный облачный стек может занять несколько секунд.
  2. Потребление памяти: одно и то же приложение потребляет 74 МБ кучи по сравнению с 130 МБ в традиционном облачном стеке.
  3. Собственная компиляция: если мы скомпилируем приложение в собственный образ, время запуска уменьшится до поразительных 0,016 секунды, и оно потребляет всего 13 МБ памяти.

Помните, что эти цифры относятся к конкретному варианту использования и могут не отражать точную производительность, которую вы получаете с вашим приложением.

Но в целом Quarkus представляет собой значительный шаг вперед для корпоративной Java. Сочетание упреждающей (AOT) и своевременной (JIT) компиляции в сочетании с современной гибкой инфраструктурой делает его привлекательным вариантом для микросервисов, бессерверных и других облачных приложений.

Подготовка

Прежде чем мы начнем, убедитесь, что у вас есть необходимые инструменты:

  1. JDK 11 или новее
  2. Maven 3.6.2 или новее
  3. Докер (для PostgreSQL)
  4. Ваша любимая IDE

Настройка проекта Quarkus

Во-первых, мы создадим наш проект. Перейдите в каталог, в котором вы хотите разместить свой проект, и выполните следующую команду:

mvn io.quarkus:quarkus-maven-plugin:2.7.1.Final:create \
    -DprojectGroupId=org.example \
    -DprojectArtifactId=ecommerce-api \
    -DclassName="org.example.ProductResource" \
    -Dpath="/products"

Отлично, теперь у вас настроен проект Quarkus!

Настройка базы данных

Далее мы настроим нашу базу данных PostgreSQL с помощью Docker:

docker run --name ecommerce-db -e POSTGRES_PASSWORD=password -e POSTGRES_DB=ecommerce -p 5432:5432 -d postgres

Создание объекта

Теперь давайте создадим сущность Product. В src/main/java/org/example создайте новый класс Product.java:

package org.example;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Entity
public class Product {
    @Id
    @GeneratedValue
    private Long id;
    @NotBlank
    private String name;
    @NotNull
    private BigDecimal price;
    // getters and setters
}

Создание репозитория

Далее мы создадим класс ProductRepository:

package org.example;
import io.quarkus.hibernate.orm.panache.PanacheRepository;
import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class ProductRepository implements PanacheRepository<Product> {
}

Настройка REST API

Наш REST API позволит пользователям создавать, читать, обновлять и удалять продукты.

package org.example;
import javax.inject.Inject;
import javax.transaction.Transactional;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.util.List;
@Path("/products")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ProductResource {
    @Inject
    ProductRepository productRepository;
    @GET
    public List<Product> getAll() {
        return productRepository.listAll();
    }
    @POST
    @Transactional
    public Product create(Product product) {
        productRepository.persist(product);
        return product;
    }
    // similarly add methods for PUT and DELETE
}

Настройка источника данных

Прежде чем мы начнем, нам нужно настроить источник данных. Откройте файл application.properties и добавьте следующее:

quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=postgres
quarkus.datasource.password=password
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/ecommerce
quarkus.hibernate-orm.database.generation=update

Схема нашей установки

Давайте проиллюстрируем структуру нашего простого приложения электронной коммерции:

Заключение

И вот оно! Вы только что создали простой API для электронной коммерции с помощью Quarkus. API взаимодействует с базой данных PostgreSQL для управления продуктами. Вы можете запустить приложение с помощью команды ./mvnw compile quarkus:dev.

Помните, что это очень простая реализация. В реальном сценарии вам, вероятно, понадобится управление пользователями, категории, изображения продуктов, корзины для покупок и интеграция с платежной системой.

Но это отличная отправная точка. Как вы видели, Quarkus позволяет очень легко настроить и запустить RESTful API. Так что идите вперед и создайте что-то удивительное!

🔗 Свяжитесь со мной в LinkedIn!

Я надеюсь, что вы нашли эту статью полезной! Если вы хотите узнать больше и быть в курсе моих последних идей и статей, не стесняйтесь связаться со мной в LinkedIn.

Давайте расширять наши сети, участвовать в содержательных дискуссиях и делиться своим опытом в мире разработки программного обеспечения и за его пределами. С нетерпением ждем связи с вами! 😊

Подпишитесь на меня в LinkedIn ➡️