Что такое Dropwizard?
Dropwizard – это Java-фреймворк с открытым исходным кодом, используемый для быстрой разработки веб-сервисов RESTful. Или, что еще лучше, это легкий, лучший в своем классе набор инструментов и фреймворков для создания веб-сервисов RESTful.
Он довольно прост в использовании, очень удобен в обслуживании и очень хорошо работал во многих различных случаях и в соответствии с официальной документацией :
“”Его цель-обеспечить производительность и надежную реализацию всего, что необходимо для готового к производству веб-приложения. Поскольку эта функциональность извлекается в повторно используемую библиотеку, ваше приложение остается экономичным и целенаправленным, сокращая как время выхода на рынок, так и затраты на обслуживание.”
Dropwizard позволяет разработчику очень быстро создать первоначальный проект – так называемый проект быстрой начальной загрузки. Это помогает упаковывать приложение таким образом, чтобы его можно было легко установить в рабочей среде в качестве автономной службы.
Если вы когда-либо сталкивались с ситуацией разработки службы REST, например, в Spring , вы, вероятно, знаете, как сложно может быть настроить базовую службу (позже мы сравним подходы Dropwizard и Spring Boot). С помощью Dropwizard необходимо буквально добавить одну из конфигураций зависимостей Maven .
Хотя Dropwizard не всем по вкусу, некоторым людям не нравится использовать компоненты и библиотеки, которые он предоставляет, и это совершенно нормально.
Компоненты Dropwizard по умолчанию
Dropwizard поставляется с базовым пакетом компонентов или библиотек, необходимых для разработки веб-сервисов RESTful, поэтому вам не нужно включать и настраивать каждый из них отдельно:
Библиотека HTTP Jetty : Как мы знаем, для запуска веб-приложения нам нужен HTTP-сервер. Dropwizard использует библиотеку HTTP Jetty для внедрения настроенного HTTP-сервера непосредственно в ваш проект. Вместо развертывания приложений на сервере приложений или веб-сервере Dropwizard определяет основной метод, который вызывает сервер Jetty как отдельный процесс. Dropwizard рекомендует использовать сервер Jetty для запуска приложений, другие серверы, такие как Tomcat, официально не поддерживаются.
Джерси : является одной из лучших реализаций REST API на рынке. Это позволяет создавать чистые классы, которые сопоставляют HTTP-запрос с простыми объектами java. Кроме того, он соответствует стандартной спецификации JAX-RS, и Dropwizard использует его в качестве инструмента по умолчанию для разработки веб-приложений RESTful.
Джексон : безусловно, стал стандартом, когда дело доходит до сопоставления объектов данных с JSON и из JSON. Это один из лучших API отображения объектов для формата JSON.
Метрики : Dropwizard имеет собственную библиотеку, которая позволяет нам считывать метрики приложений через конечные точки HTTP.
Guava : это служебная библиотека Google, которая предоставляет нам большое количество классов для ускорения разработки на Java.
Logback и Slf4j : Эти две библиотеки используются для ведения журнала, аналогичного ведению журнала JDK (java.util.logging)
Freemarker и Усы : Выбор обработчика шаблонов является одним из наиболее важных решений. Dropwizard использует хорошо известные и популярные процессоры и процессоры для создания пользовательских интерфейсов.
Apache HttpClient : Предоставляет возможность взаимодействия с другими веб-службами.
Валидатор гибернации : Используется для проверки ввода данных пользователем.
Dbi : Классы доступа к базе данных, которые поддерживают режим гибернации.
Время Джоды : Библиотека для обработки дат и времени.
Liquid base : Независимая от базы данных с открытым исходным кодом библиотека для отслеживания, управления и применения изменений схемы базы данных.
Это своего рода самые основные ингредиенты, если вы хотите создать хороший спокойный JSON, обслуживающий Java-сервис. Dropwizard очень хорошо сочетает это с точки зрения операций. Часть показателей действительно важна, потому что она не только предоставляет показатели, но и предупреждает вас, если вы не применяете лучшие методы работы, такие как создание проверок работоспособности.
Проверки работоспособности регистрируются как часть создания приложения. Если вы не зарегистрируете проверку работоспособности, стартап будет предупреждать вас и жаловаться каждый раз, когда вы запускаетесь. Я включу это в пример позже.
Конфигурация Maven
Dropwizard официально поддерживает Maven. Вы также можете использовать другие инструменты сборки, хотя в большинстве руководств и документации используется Maven. Maven-это инструмент управления проектами , основанный на концепции объектной модели проекта (POM).
POM.xml содержит всю информацию о вашем проекте (описание проекта, атрибуты, лицензия, версия, список зависимостей и т.д.)
Мы определим dropwizard.version
, прежде чем добавлять зависимости, в теге <свойства>
в вашем “pom.xml”:
1.3.5
Добавьте следующие зависимости в свой pom.xml
файл:
io.dropwizard dropwizard-core ${dropwizard.version}
Вы можете добавить номер версии непосредственно в <версия>
раздел, например:
1.3.5
После успешной настройки Maven мы можем приступить к созданию нашего приложения Dropwizard.
Создание класса конфигурации
Каждое приложение Dropwizard хранит конфигурацию в файлах YAML . Мы должны создать файл “config.yml” в корневом каталоге нашего приложения. Этот файл “yml” будет десериализован в экземпляр класса Конфигурация
нашего приложения. Класс конфигурации нашего приложения является подклассом класса конфигурации Dropwizard ( io.dropwizard.Configuration
).
Класс конфигурации:
public class DemoConfiguration extends Configuration { @NotEmpty private String message; @NotEmpty private String firstParameter; @NotEmpty private String secondParameter; @JsonProperty public String getMessage() { return message; } @JsonProperty public void setMessage(String message) { this.message = message; } public String getFirstParameter() { return firstParameter; } public void setFirstParameter(String firstParameter) { this.firstParameter = firstParameter; } public String getSecondParameter() { return secondParameter; } public void setSecondParameter(String secondParameter) { this.secondParameter = secondParameter; } }
Теперь для файла “config.yml” в корневом каталоге нашего приложения:
message: Hi %s!, now you will learn about %s from Stack Abuse! firstParameter: Friend secondParameter: Dropwizard
Класс Демонстрационная конфигурация
будет десериализован из файла YML, и значения полей будут заполнены так, как они в нем настроены.
Создание класса приложения
Теперь должен быть создан основной класс приложения. Этот класс подберет все необходимые модули и подготовит наш сервис к использованию.
Вот простой пример класса приложения:
Демонстрационное приложение:
public class DemoApplication extends Application{ public static void main(String[] args) throws Exception { new DemoApplication().run(new String[] {"server", "config.yml"}); } public void run(DemoConfiguration configuration, Environment environment) { // code to register module } }
Создание класса представления
Теперь мы должны рассмотреть наш сервис REST API и то, как будут представлены ресурсы. Нам нужно разработать формат JSON и определить соответствующий класс представления, чтобы гарантировать, что данные находятся в нужном формате:
{ "content": "Hi Friend! Now you will learn about Dropwizard from Stack Abuse!" }
Для достижения этого формата мы будем использовать следующую реализацию класса Представление
:
Представление:
public class Representation { @Length(max = 3) private String content; public Representation() { // Jackson deserialization } @JsonProperty public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Representation(String content) { this.content = content; } }
Это простая POJO модель. Наш класс использует стандарт Java Bean для свойства content
. Это позволяет Джексону сериализовать его в нужный нам JSON.
Код сопоставления объектов Джексона заполнит поле содержимого объекта JSON возвращаемым значением getContent()
.
Создание класса ресурсов
Ресурсы-это суть Dropwizard. Ресурсы на самом деле являются определениями URI конечной точки нашей службы, к которым можно получить доступ по протоколу HTTP. В этом примере мы создадим класс ресурсов с парой аннотаций для сопоставления HTTP-запросов.
Поскольку Dropwizard использует реализацию JAX-RS , мы будем использовать аннотацию @Path
для определения пути:
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Демонстрационный ресурс :
@Path("/v1/resource") @Produces(MediaType.APPLICATION_JSON) public class DemoResource { private final String message; private final String firstParameter; private final String secondParameter; public DemoResource(String message, String firstParameter, String secondParameter) { this.message = message; this.firstParameter = firstParameter; this.secondParameter = secondParameter; } @GET @Timed public Representation getMessage(@QueryParam("first") Optionalfirst, @QueryParam("second") Optional second) { final String value = String.format(message, first.or(firstParameter), second.or(secondParameter)); return new Representation(value); } }
@Timed
используется для автоматической записи продолжительности и скорости его вызовов в качестве Таймера метрик .
Регистрация ресурса
Теперь необходимо зарегистрировать класс выше в основном классе приложения. Как упоминалось выше, класс приложения служит для инициализации нашего сервиса и всех необходимых модулей, поэтому все ресурсы должны быть зарегистрированы здесь для инициализации с помощью сервиса.
В основной класс приложения добавьте следующее:
@Override public void run(DemoConfiguration configuration, Environment environment) { final DemoResource resource = new DemoResource(configuration.getMessage(), configuration.getFirstParameter(), configuration.getSecondParameter()); environment.jersey().register(resource); }
Создание приложения Dropwizard
Рекомендуется создать так называемый FAT JAR , который будет содержать все необходимые файлы “.class”, необходимые для запуска приложения. Этот JAR может быть развернут в различных средах от тестирования до производства без каких-либо изменений.
Чтобы сделать нашу БАНКУ, нам нужно настроить плагин Maven maven-shade
. В нашу “pom.xml”, в разделе зависимости
:
org.apache.maven.plugins maven-shade-plugin 2.3 true *:* META-INF/*.SF META-INF/*.DSA META-INF/*.RSA package shade com.dropwizard.DemoApplication
Запуск вашего приложения
Теперь мы должны иметь возможность запустить наше приложение. Если вы успешно создали свой JAR, вы можете запустить его из командной строки:
$ java –jar target/dropwizard-demo-1.0.SNAPSHOT.jar server config.yml
или непосредственно из вашей среды разработки – запустив Демонстрационное приложение
основной класс:
Если все началось правильно, вам должно быть предложено что-то вроде этого:
Теперь ваше приложение Dropwizard прослушивает порт 8080 для запросов приложений и порт 8081 для запросов администрирования. Вы заметите, что мы использовали аргументы server
и config.yml
для запуска службы, указывая серверу, какой файл конфигурации использовать.
Это также можно сделать в методе main
класса DemoApplication
, как в примере выше.
Вы можете получить доступ к своему приложению по адресу http://localhost:8080/v1/resource
или с параметрами http://localhost:8080/v1/resource?первый=Джон и второй=все
.
Вы должны получить сообщение с параметрами пересылки или без них, в зависимости от вашего звонка.
Изменение пути контекста
По умолчанию приложение Dropwizard будет запускать свои конечные точки на /пути
. Поэтому, если вы не укажете какой-либо контекстный путь для своего приложения, предполагается, что доступ к приложению можно получить по адресу http://localhost:8080
. Однако, если вы хотите изменить это, вы можете настроить другой путь, добавив следующее в свой файл YML:
server: applicationContextPath: /application
Добавление проверки работоспособности
Что касается более раннего заявления о системе показателей, обеспечивающей проверку работоспособности:
Проверки работоспособности-это просто конечные точки HTTP, которые повторяют различные созданные вами крючки. В то время как некоторые поддаются искушению вернуть проверку работоспособности, которая всегда возвращает “здоровый” статус, пока служба работает, это действительно плохая практика.
Проверки работоспособности следует использовать для улучшения кода, например: если у вас есть база данных, вы должны иметь возможность обеспечить подключение к базе данных. Проведите там проверку работоспособности, убедитесь, что в базе данных не слишком много клиентских подключений или каких-либо блокировок потоков и т. Д.
Давайте создадим наш Медицинский осмотр
класс:
Демонстрационная проверка работоспособности:
Ради учебника мы постараемся сделать это простым. В рабочей среде эти проверки выглядели бы по-другому, но в основном они вращаются вокруг проверки случаев, подобных этому:
public class DemoHealthCheck extends HealthCheck { @Override protected Result check() throws Exception { final String field = "Dropwizard"; if (field.equalsIgnoreCase("Dropwizard")) { return Result.healthy(); } return Result.unhealthy("Error, not Healthy!"); } }
Как и раньше, теперь мы регистрируем наш класс HealthCheck
в основном классе приложения.
Демонстрационное приложение:
@Override public void run(DemoConfiguration configuration, Environment environment) { final DemoResource resource = new DemoResource(configuration.getMessage(), configuration.getFirstParameter(), configuration.getSecondParameter()); final DemoHealthCheck healthCheck = new DemoHealthCheck(); environment.healthChecks().register("Dropwizard", healthCheck); environment.jersey().register(resource); }
Теперь, когда вы запускаете приложение, вывод журнала консоли не будет жаловаться вам на проверки работоспособности.
Различия между подходами Dropwizard и Spring Boot
И то, и другое действительно легко освоить и начать работу в течение нескольких часов после написания вашего первого приложения.
HTTP | Пристань | Кот |
ОСТАЛЬНОЕ | Джерси | Весна, JAX-RS |
JSON | Джексон | Джексон, GSON, json-просто |
Метрика | Показатели Dropwizard | Весна |
Медицинские Осмотры | Волшебник падения | Весна |
Регистрация | Обратный вход, slf4j | Вход в систему, Log4j, slf4j, Apache commons-ведение журнала |
Тестирование | dropwizard-тестирование (Junit, Mockito) | весенняя загрузка-стартовый тест (JUnit, Mockito) |
Официальные Интеграции | Валидатор гибернации, Guava, Apache HttpClient, клиент Джерси, JDBI, Liquibase, Усы, Freemaker, время Joda | 40+ официальный стартовый помпон для любых целей |
Вывод
Когда ваше приложение будет запущено и запущено, мы можем дать некоторые рекомендации по использованию Dropwizard для разработки веб-сервисов RESTful.
Dropwizard ориентирован на производство, прост в использовании, прост в развертывании, прост в мониторинге, разработке и настройке высокопроизводительной платформы REST.
Возможно, одним из самых больших преимуществ является невероятно быстрая настройка начальной загрузки для вашего проекта. Благодаря включенному набору инструментов и библиотек, удовлетворяющих потребности большинства разработчиков, вам не нужно беспокоиться о добавлении и настройке каждого из них отдельно.
Некоторые недостатки заключаются в том, что вы как бы ограничены в использовании того, что предлагает или поддерживает Dropwizard (теряя свободу), но также добавление слишком большого количества сторонних библиотек может привести к ненужной сложности разработки.