Я, наконец, решил опубликовать свою первую статью, и я пытаюсь изучить кварки. Итак, я пишу эту статью для нашего первого применения сверхзвуковых кварков. Мы разработаем приложение RESTful с использованием JAX-RS для приложения To Do.
В последнее время я много раз слышал, что java устареет, и для этого есть много веских причин. Но, не более того, если сообщество java может придумать что-то вроде quarks, то я уверен, что java никуда не денется. Это действительно потрясающий фреймворк, и, надеюсь, вы также скажете это после прочтения этой статьи.
Что такое кварки?
Quarkus – это собственный Java-фреймворк Kubernetes, разработанный специально для GraalVM и HotSpot. Цель Quarks – сделать Java ведущей платформой в Kubernetes и бессерверных средах, предлагая разработчикам унифицированную реактивную и императивную модель программирования для оптимального решения более широкого спектра архитектур распределенных приложений.
Почему кварки?
Всякий раз, когда кто-то думает о разработке java. Они думают, что приложение будет занимать огромную память, и его будет трудно разрабатывать по сравнению с его аналогами. Но quarks, давайте разработаем высокопроизводительные приложения, которые занимают очень мало места и с которыми легко работать благодаря таким функциям, как live reload. Кроме того, широкий спектр расширений и библиотек, предоставляемых командой и сообществом quark u, делает создание приложения quarks намного проще и увлекательнее (да, java может быть забавным 😅 ).
пожалуйста, перейдите по этой ссылке для получения дополнительной информации: https://quarkus.io/
резюме:
- меньшее использование памяти
- быстрое время запуска
- живая перезагрузка из коробки
- использует стандартные спецификации java ee. так что, если вы уже знакомы с jakarta ee или даже с spring, вам хорошо идти
- Quarks не использует reflection API.
Для настройки среды разработки
вам понадобится:
- JDK 8 или 11 с настроенным JAVA_HOME
- Graal VM (если вы хотите создать собственный образ)
- Apache Maven или Gradle
- IDE (я предпочитаю intellij Idea)
Приступая к работе
Самый простой способ – перейти к https://code .quarkus.io/ и загрузите zip-файл исходного приложения с конфигурацией по умолчанию и эти библиотеки
- Простое внедрение JAX-RS
- RestEasy Json
Это ваш выбор – использовать maven или gradle. Я буду использовать gradle.
Структура проекта будет выглядеть следующим образом:
quarkus-project/
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── README.md
├── settings.gradle
└── src
├── main
│ ├── docker
│ │ ├── Dockerfile.jvm
│ │ └── Dockerfile.native
│ ├── java
│ │ └── org
│ │ └── quarkus
│ │ ├── ExampleResource.java
│ └── resources
│ ├── application.properties
│ └── META-INF
│ └── resources
│ └── index.html
├── native-test
│ └── java
│ └── org
│ └── quarkus
│ └── NativeToDoResourceIT.java
└── test
└── java
└── org
└── quarkus
└── ToDoResourceTest.java
- В ExampleResource.java содержит конечную точку REST.
- Папка docker содержит два файла для создания приложения в качестве контейнера. Dockerfile.jvm для запуска приложения на JVM и Dockerfile.нативный для создания нативного приложения.
- Тест и native-test для тестирования JVM и собственное приложение
- Статические ресурсы помещаются в папку resources , например index.html .
- application.properties – это файл yaml, используемый для настройки. например, определение источника данных и настройка базы данных.
Создание нашего ToDo API
Для простоты я не буду использовать базу данных в этой статье и, возможно, покажу, как ее использовать в следующей статье.
Вы можете попробовать запустить начальный проект с помощью
./gradlew quarkusDev ./mvnw quarkus:dev
Это позволит запустить приложение в режиме разработки, который обеспечивает горячую перезагрузку. таким образом, любое изменение в коде мгновенно становится видимым без перезапуска приложения. Продолжайте и попробуйте это, просто изменив некоторый текст инструкции return.
Первоначальный проект содержит Пример ресурса простая конечная точка hello, которая возвращает hello. Замените это на Чтобы сделать Resource и добавить этот код.
ToDoResource.java
Это содержит 6 конечных точек для основных операций CRUD:
- GET
/api/todoвозвращает все задачи - GET
/api/todo/{id}возвращает задачу с заданным идентификатором - POST
/api/todoс телом объекта ToDo json для создания новой задачи - POST
/api/todoс телом строки задачи для создания новой задачи - ИСПРАВЛЕНИЕ
/api/todo/status/{id}для обозначения выполненной или не выполненной задачи- завершенный - УДАЛИТЬ
/api/todo/{id}удаляет задачу с заданным идентификатором
@Path Аннотация задает uri для конечной точки. Он используется для определения базового URL-адреса, когда он объявлен в верхней части ресурса, и указывает uri для конкретного API, если указан через функцию. например, api/to do в данном случае является базовым URL, а status/{id} – URL API изменения статуса.
@Products Аннотация указывает, какой тип результата обслуживается API. например, для JSON, обычного текста или HTML.
@Consumes Аннотация указывает, какой тип тела используется API. например, для JSON, обычного текста или HTML.
@@Inject Аннотация используется для введения экземпляра ToDoService с использованием CDI. Это позволяет нам просто использовать нужную нам зависимость/объект, не беспокоясь о его создании и жизненном цикле, поскольку он управляется системой внедрения контекста и зависимостей.
package org.quarkus;
import javax.inject.Inject;
import javax.validation.Valid;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("/api/todo")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ToDoResource {
@Inject
ToDoService service;
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response newTask(@Valid ToDo task) {
try {
if (task == null) {
return Response.status(400).entity("Task not provided").build();
}
return Response.ok(service.addTask(task)).build();
}
catch (Exception e){
return Response.serverError().build();
}
}
@POST
@Consumes(MediaType.TEXT_PLAIN)
public Response newTaskString(@Valid String task) {
try {
if (task == null) {
return Response.status(400).entity("Task not provided").build();
}
return Response.ok(service.addTask(task)).build();
}
catch (Exception e){
return Response.serverError().build();
}
}
@GET
public Response allTasks(){
return Response.ok(service.allTasks()).build();
}
@GET
@Path("/{id}")
public Response task(@PathParam("id") String id){
return Response.ok(service.getTask(id)).build();
}
@PATCH
@Path("status/{id}")
public Response changeStatus(@PathParam("id") String id){
return Response.ok(service.changeStatus(id)).build();
}
@DELETE
@Path("/{id}")
public Response delete(@PathParam("id") String id){
return Response.ok(service.delete(id)).build();
}
}
ToDo.java
Это наш POJO с конструкторами для инициализации объектов.
package org.quarkus;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Future;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.UUID;
public class ToDo {
@NotNull
public String id;
@NotNull
public String task;
@NotNull
public boolean isComplete;
@NotNull
public Date time;
public ToDo(String task, Date time) {
this.id = UUID.randomUUID().toString();
this.task = task;
this.isComplete = false;
this.time = time;
}
public ToDo(String task, boolean isComplete, Date time) {
this.id = UUID.randomUUID().toString();
this.task = task;
this.isComplete = isComplete;
this.time = time;
}
@Override
public String toString() {
return "ToDo{" +
"id='" + id + '\'' +
", task='" + task + '\'' +
", isComplete=" + isComplete +
", time=" + time +
'}';
}
}
TodoService.java
Этот класс содержит логику приложения. Это Область применения , что означает, что в течение срока службы приложения создается только один экземпляр этого класса, и один и тот же экземпляр вводится и повторно используется везде, где это требуется системой CDI.
package org.quarkus;
import javax.enterprise.context.ApplicationScoped;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
@ApplicationScoped
public class ToDoService {
ArrayList list = new ArrayList<>();
public ToDoService(){
}
public boolean addTask(String task){
ToDo toDo = new ToDo(task, false, new Date());
return list.add(toDo);
}
public boolean addTask(ToDo task){
return list.add(task);
}
public List allTasks(){
return list;
}
public ToDo getTask(String id){
Optional item = list.stream().filter(toDo -> toDo.id.equals(id)).findFirst();
return item.orElse(null);
}
public ToDo changeStatus(String id){
ToDo todo = getTask(id);
todo.isComplete = !todo.isComplete;
return todo;
}
public boolean delete(String id){
return list.remove(getTask(id));
}
}
Теперь вы можете запустить приложение, используя ту же команду, что и ранее. Вывод на терминале будет выглядеть следующим образом.
dhruv@dhruv-laptop:~/Programs/javaPrograms/to_do$ ./gradlew quarkusDev Starting a Gradle Daemon (subsequent builds will be faster) > Task :quarkusDev Listening for transport dt_socket at address: 5005 __ ____ __ _____ ___ __ ____ ______ --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ 2020-07-02 19:03:56,518 INFO [io.quarkus] (Quarkus Main Thread) to_do 1.0.0-SNAPSHOT on JVM (powered by Quarkus 1.5.2.Final) started in 6.566s. Listening on: http://0.0.0.0:8080 2020-07-02 19:03:56,578 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated. 2020-07-02 19:03:56,579 INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, resteasy, resteasy-jsonb] <=========----> 75% EXECUTING [41s] > :quarkusDev
Если вы присмотритесь, вы увидите, что он также сообщает обо всех установленных функциях, таких как cdi, resteasy, resteasy-json b в 3-й строке после баннера quarkus.
Создание собственного исполняемого файла
Используйте приведенную ниже команду для создания собственного исполняемого файла
./mvnw package -Pnative
./gradlew build -Dquarkus.package.type=native
В результате сборки будет создан target/{package_name}-1.0-SNAPSHOT-runner. Вы можете запустить его с помощью: ./target/{package_name}-1.0-SNAPSHOT-runner в Linux.
Для получения более подробной информации о правильной настройке перейдите по ссылке this
В этой статье мы рассмотрели, как создать простой REST Api в Quarks и почему quarkus позволяет нам, разработчикам, создавать лучшие приложения.
Вы можете найти исходный код здесь . звездное репо, если вам это нравится.
Надеюсь, вам понравилась эта статья, и она помогла вам узнать что-то новое. Это мой первый раз, когда я пишу о кварках и размещаю статью/блог в Интернете. Не стесняйтесь, дайте мне знать, если что-то не так в комментариях, также сообщите в комментариях, понравилось ли вам это. Вы можете связаться со мной через twitter |/или сеть LinkedIn
Спасибо, что прочитали эту статью. Желаю удачи в изучении кварков.
Оригинал: “https://dev.to/dhruvgarg79/how-to-create-rest-api-in-quarkus-n2n”