Я, наконец, решил опубликовать свою первую статью, и я пытаюсь изучить кварки. Итак, я пишу эту статью для нашего первого применения сверхзвуковых кварков. Мы разработаем приложение 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 { ArrayListlist = 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”