写点什么

Dropwizard Java REST 框架发布 1.0.0 版本

  • 2016-09-06
  • 本文字数:2369 字

    阅读完需:约 8 分钟

在近五年的开发之后,Dropwizard 的 Java RESTful Web 服务框架发布了 1.0.0 版本,它提供了一系列的新特性,并提供了支撑 Java API 的最新版本。

在这个里程碑发布版本中,包含了如下的特性:

在他们 Web 站点的发布说明上,能够看到完整的列表。

Web 站点上,Dropwizard 是这样定义的:

Dropwizard 是一个 Java 框架,用于开发运维友好、高性能、RESTful 的 Web 服务。

Dropwizard 被组织成了一系列的模块:

另外,还提供了针对 Dropwizard 的 Scala 支持

起步

起步指南提供了概述,包含了构建基本“hello, world!”应用的详细指导。这个指南推荐使用 Maven 来构建应用,但是其他的构建工具如 Ant Gant Gradle SBT 也可以使用。

如下的 Maven 命令会按照交互模式生成基础的 Dropwizard 应用:

mvn archetype:generate -DarchetypeGroupId=io.dropwizard.archetypes -DarchetypeArtifactId=java-simple -DarchetypeVersion=1.0.0正确地回答这些提示问题非常重要,比如:

  • $groupId:用于源码的打包,比如 com.example 或 io.dropwizard,它会作为 $package 的默认值;
  • $artifactID:用于生成应用的根目录,比如 dropwizard-1.0.0;
  • $version:默认值是 1.0-SNAPSHOT;
  • $package:默认值是通过$groupId的值读取到的;
  • $name:按照驼峰规则的名称,比如 HelloWorld。这样的话会生成 HelloWorldApplication.java 和 HelloWorldConfiguration.java,它们扩展自基础类,分别是 Application.java 和 Configuration.java。

[点击图片放大]

在文档剩下的步骤完成后,这个样例就可以在用户本地的机器上运行了,使用 http://localhost:8080/hello-world?name=Michael+Redlich 这样的 URL,将会得到如下的服务器响应:

我们在 GitHub 上可以找到针对数据库版本的“hello, world!”应用。

更为复杂的样例

Al Scott 创建过更为复杂的应用,他是 Campspot 的开发领导,并且还是 Atomic Object博客(Atomic Spin)的长期贡献者。他撰写过由三部分所组成的博客系列,分别实现了认证授权多租户功能,用来阐述Dropwizard 的相关特性。因为Scott 的系列文章是基于Dropwizard 0.9.x 编写的,所以InfoQ 与他进行了交流,探讨了他对这次里程碑版本发布的看法。

InfoQ:你为什么会钟情于 Dropwizard?

Al Scott:在我的职业生涯中,曾经使用过多个不同的 Web 平台,但是没有一个像 Dropwizard 这样高效。所有的组件都坚若磐石并且经过了深思熟虑,所以,我能够集中精力完成自己的事情。如果需要深入框架源码来了解某些功能是如何实现的话,你会发现这是非常有趣的事情,因为 Dropwizard 的源码可以说是我见过的最棒和最易于理解的代码。另外,我还很欣赏这个框架的整体稳定性。更新通常会带来丰富的特性,这些特性能够以最小的破坏性非常便捷地进行运用。底层的核心库(Jersey、Jetty、Jackson 和 Hibernate)也非常稳定,所以当版本变更的时候,很少会有较大的意外出现。

InfoQ:在开发 RESTful Web 服务方面,Dropwizard 与其他 Java 框架的区别是什么?

Al Scott:我认为,构建和运行过程的简洁性是让 Dropwizard 与众不同的关键所在。我曾经见识过各种 Spring MVC 和 Tomcat/Websphere 的搭建过程,Dropwizard 只需一个 pom 文件,并且能够得到一个可直接运行的 jar 文件,对于这种方式,我是非常欣赏的。在运维方面,这一点意义重大,因为这会让服务的部署过程变得非常简单,不必再去处理繁琐的 WAR 文件和复杂的 XML 配置。另外,我比较欣赏的一点就是 Dropwizard 没有偏离其底层库的初衷,在能够提供帮助的地方,它进行了一些很好的抽象,但是整体而言保持了这些库的原貌,所以我们可以很容易地按照这些底层库的文档来使用它们。

InfoQ:在升级到 Dropwizard 1.0 的过程中,你的示例应用受到过什么负面的影响吗?

Al Scott:针对我的博客文章所创建的 Github repository 其实已经更新到了 Dropwizard 1.0。这大约耗费了 10 分钟的时间,其中有个接口 io.dropwizard.auth.Authenticator 有所变更。原来它使用的是 Guava 的 optional 类,现在改成了 Java 8 内置的 Optional。在升级生产环境的应用时,我也遇到过类似的情况,生产环境的应用所对应的代码库会更大一些。在生产环境中,我遇到的唯一一个问题就是需要添加一个我们所使用的 logging appender,它目前还没有转换到 1.0 的版本中。整体的升级非常简单,我实在想不出大家不尽快进行升级的理由。

InfoQ:在升级在 Dropwizard 1.0 版本之后,你的示例应用有机会进行一些增强吗?

Al Scott:在我们的生产环境应用中,我们一直比较喜欢的是资源方法(resource method)对返回值的校验。另外,对 Java 8 支持的增强也是非常棒的,在原来的一些场景中,我们必须要使用 Guava Optionals 和 Joda time,现在就可以直接使用 Java 8 中对应的特性了。

在生产环境采用 Dropwizard 的组织包括:

Dropwizard 提供了一个供我们学习的用户指导,另外他们还鼓励开发人员通过访问Dropwizard GitHub 的 repository 来为这个项目作出贡献。

查看英文原文: Dropwizard Java REST Framework Version 1.0.0 Features Updated Library Support, Scala, and Java 8

2016-09-06 19:003382

评论

发布
暂无评论
发现更多内容

2023移动端技术探索

轻口味

android 移动端 行业趋势 三周年连更

【源码分析】【seata】at 模式分布式事务 -xid隐式传递

如果晴天

源码分析 分布式事务 seata spring-cloud Seata框架

中国厨房更净一步:一场科技“下凡”带来的方太式浪漫

脑极体

如何在 Linux 中查看正在运行的进程?这三个命令轻松实现!

wljslmz

Linux 三周年连更

iOS MachineLearning 系列(8)—— 图片热区分析

珲少

NCCL源码解析③:机器内拓扑分析

OneFlow

ChatGPT-4!又双叒叕写了一本量化交易的书(附下载)

量化投资与机器学习

机器学习 量化投资 ChatGPT4 对冲基金 Quant

华为阅读联手20余家头部内容平台,共建数字化阅读

最新动态

人工智能训练数据集:误区、挑战与应对方法

数据堂

场景篇-ChatGPT帮我搭建博客网站并自动写博客!

Marvin

博客 ChatGPT

在oracle apex中的Dialog的做法(第一部门):

back_wang

oracle dialog oracle ebs ebs

和ChatGPT结对完成VS CODE插件项目分享

Marvin

vscode 插件 插件开发 ChatGPT

轻量级协作任务管理看板

顿顿顿

敏捷开发 任务管理 敏捷开发管理工具 看板工具 scrum工具

数据标注,优化模型辅助标注、Label 库管理|ModelWhale 版本更新

ModelWhale

云计算 编程 模型 数据标注 数据门户

ChatGPT 在 Python WEB 的Prompt项目分享

Marvin

Python 开发 ChatGPT

场景篇-ChatGPT帮我实现发送公众号推文

Marvin

微信公众号 代码生成 ChatGPT

Java 中的 null 到底是什么?

Java架构历程

Java 三周年连更

龙蜥开发者说:亲历从基础设施构建到系统质量保障,龙蜥未来可期 | 第 19 期

OpenAnolis小助手

Linux 开源 sig 龙蜥开发者说 联通数科

ZincSearch 一款 Elasticsearch 的轻量级替代品

宇宙之一粟

Go 三周年连更 ZincSearch

2023 年要避免的 17 个致命的网站设计错误

海拥(haiyong.site)

三周年连更

Go 语言中没有枚举类型,但是我们可以这样做

陈明勇

Go golang 枚举 Enum 三周年连更

音视频八股文(7)-- 音频aac adts

福大大架构师每日一题

音视频 流媒体

挑战 30 天学完 Python:Day13 列表推导式和Lambda

MegaQi

挑战30天学完Python 三周年连更

eBPF的发展演进---从石器时代到成为神(四)

统信软件

操作系统 Linux Kenel

性能大PK count(*)、count(1)和count(列)

架构精进之路

MySQL 数据库 后端 innodb 三周年连更

Apache Doris 1.2.4 Release 版本正式发布|版本通告

SelectDB

数据库 大数据 数据分析 Doris 联邦查询和分析

Go的内存模型:如何保证并发读写的顺序性?

Jack

Django笔记十八之save函数的继承操作和指定字段更新等实例方法

Hunter熊

Python django save auto_increment primary key

2022-04-27:用go语言重写ffmpeg的remuxing.c示例。

福大大架构师每日一题

golang ffmpeg

《爱在黎明破晓前 | 我有话要说》

后台技术汇

三周年连更

Dropwizard Java REST框架发布1.0.0版本_Java_Michael Redlich_InfoQ精选文章