BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Dropwizard Java REST框架发布1.0.0版本

| 作者 Michael Redlich 关注 15 他的粉丝 ,译者 张卫滨 关注 13 他的粉丝 发布于 2016年9月7日. 估计阅读时间: 9 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

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

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

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

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

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

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

  • Dropwizard Core(大多数应用都需要的内容)
  • Dropwizard Client(Apache HttpClientJersey Client
  • Dropwizard JDBI(管理对JDBI的访问)
  • Dropwizard Migrations(针对Liquibase的包装器)
  • Dropwizard Hibernate(管理对Hibernate的访问)
  • Dropwizard Authentication(提供基于基本认证或OAuth的认证功能)
  • Dropwizard Forms(通过Jersey,提供对multipart表单的支持)
  • Dropwizard Validation(包含了Hibernate Validator
  • Dropwizard Views(FreeMarkerMustache

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

起步

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

如下的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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

晚了 by Ji Tao

这1.0.0发布都一个来月了文章才出来

使用场景呢? by 李 鹏

有人在用么?

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT