Dropwizard Java REST框架釋出1.0.0版本

weixin_33858249發表於2016-09-06

在近五年的開發之後,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。\

[點選圖片放大]

\\

ad6c74392a474e30399a812a5debf234.png

\\

在文件剩下的步驟完成後,這個樣例就可以在使用者本地的機器上執行了,使用http://localhost:8080/hello-world?name=Michael+Redlich這樣的URL,將會得到如下的伺服器響應:

\\

9bb379671d4a843970a9028d4d321459.png

\\

我們在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

相關文章