8 個最好的 Java RESTful 框架
過去的每一年,湧現出越來越多的Java框架。就像JavaScript,每個人都認為他們知道一個好的框架的功能應該是怎麼樣的。連我的老祖母現在也使用 一個我從來沒有聽說過而且可能永遠不會使用的框架。玩笑歸玩笑,可以做幾乎任何事的臃腫的框架市場已經飽和,,但是如何評判呢?這篇文章旨在提供目前最好的 Java RESTfulful 框架。我只介紹輕量級的產品, 略過了那些臃腫的過度設計的框架。同時,我只想要他們穩定和成熟,提供簡單,輕量級的特點。我只在介紹Play frameworks時打破這條規則,理由稍後給出。在將來的專案中使用哪個 Java RESTful框架完全取決於你當前的需求。為了便於你取捨,我將列出最突出的框架功能,希望這能節省一些你的時間。
Dropwizard
誕生時間: 2011
評分: 4.5/5
Dropwizard 提供了穩定成熟的Java庫, 並封裝成一個簡單的輕量級的包。
Dropwizard 介於框架和庫之間。它提供了一個開發web應用程式的全部所需。由於內建模組化,一個應用程式可以保持小而精幹的特點,減少開發和維護的時間,減少負擔。
Dropwizard 使用已有的 Jetty HTTP 庫,嵌入到你的專案中,無需外部的server。所有的Dropwizard專案都有一個 main 方法來管理內建的 HTTP server.
連結
優點
- 快速的專案構建和啟動
- 模組化
- 不可思議的快(至少根據內建的 metric 測得的結果)
- Jetty for HTTP, Jersey for REST, 以及 Jackson for JSON
- 也支援其它的庫, 比如 Mustache, Logback, JDBI, Hibernate Validator, Guava, …
- 使用Metrics支援監控
- Main方法啟動 Jetty server,可以容易地除錯和維護
- 社群力度強
缺點
- Dropwizard文件是主要的知識來源,但談不上優秀。你可能需要搜尋和發掘第三方類庫的文件。
- 因為某些原因錯誤被當作普通文字, 如果你希望響應結果總是JSON,這可能有問題
- 確保使用最新的Dropwizard, 一些老版本使用了廢棄的第三方庫。 而且早期的Dropwizzard也很難升級
例子
package com.example.helloworld; import io.dropwizard.Application; import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Environment; import com.example.helloworld.resources.HelloWorldResource; import com.example.helloworld.health.TemplateHealthCheck; public class HelloWorldApplication extends Application<HelloWorldConfiguration> { public static void main(String[] args) throws Exception { new HelloWorldApplication().run(args); } @Override public String getName() { return "hello-world"; } @Override public void initialize(Bootstrap<HelloWorldConfiguration> bootstrap) { // nothing to do yet } @Override public void run(HelloWorldConfiguration configuration, Environment environment) { // nothing to do yet } }
註解
個人不想為大的專案推薦這個框架。不過如果你想嘗試的話,你不會失望的。主要是這個框架使用最好的現代的Java web 元件,組裝成一個簡單易用的框架。
不幸的是這也帶來了它的問題。 將這些庫糅合起來可能導致不可預見的問題。這也是我為什麼給它減掉0.5顆星,而沒有評為滿分5顆星。
Jersey
誕生時間: 2012 (Jersey 2.X)
評分: 5/5
Jersey RESTful 框架是開源的RESTful框架, 實現了JAX-RS (JSR 311 & JSR 339) 規範。它擴充套件了JAX-RS 參考實現, 提供了更多的特性和工具, 可以進一步地簡化 RESTful service 和 client 開發。儘管相對年輕,它已經是一個產品級的 RESTful service 和 client 框架。
連結
優點
- 優秀的文件和例子
- 快速
- 超級容易的路由
- 平滑的 JUnit 整合
- 就個人而言, 當開發 RESTful service 時, JAX-RS 實現要好於 MVC 框架。
- 可以整合到其它庫/框架 (Grizzly, Netty). 這也可能是很多產品使用它的原因。
- 支援非同步連結
- 不喜歡 servlet container? 使用Jersey的時候可以不用它們。
- WADL, XML/JSON support
- 包含在Glassfish中
缺點
- Jersey 2.0+使用了有些複雜的依賴注入實現
- 可能不是一件壞事。Jersey 1.X 使用較老的 JAX-RS 實現
- 一大堆第三方庫只支援 Jersey 1.X, 在 Jersey 2.X 不可用
例子
package org.glassfish.jersey.examples.helloworld; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @Path("helloworld") public class HelloWorldResource { public static final String CLICHED_MESSAGE = "Hello World!"; @GET @Produces("text/plain") public String getHello() { return CLICHED_MESSAGE; } }
註解
Jersey 是我的選擇, 5顆星。
Ninja Web Framework
誕生時間: 2012
評分: 3.5/5
Ninja Web Framework是全棧的 java web framework。穩定, 快速, 可靠, 產品級.
它提供了開發,測試,釋出,維護 RESTful web應用的一切(Servlets, Guice, JPA, Flyway migrations, Maven, etc.).
就像 DropWizzard, Ninja Web Framework 是一個整合的軟體棧。你不必建立你自己的,只需使用 Maven archetype生成一個新的專案,匯入到IDE中就可以開始編碼了。
連結
優點
- 快
- 快速的專案構建和啟動
- 模組化
- XML, HTML, JSON渲染
- 也支援其它的庫 (如 Guice, Logback, Guava, etc.)
- 很好的資料持久化和快取
- 不喜歡 servlet container? U可以選擇你喜歡的容器
- 如果根本就不喜歡容器,可以使用 standalone 模式, 使用Jetty作為一個自執行的jar
缺點
- 同樣,就像DropWizzard, 文件有但是不夠好。我花了好長時間去了解它。這個框架也依賴很多其它的庫,有時候想得到所需的資訊很麻煩。
- 不怎麼出名,社群小。 有謠言說這個框架是由那些切換到Scala的 Play 2.X 使用者建立的
例子
package controllers; public class ApplicationController { public Result index() { Person person = new Person(); person.name = "John Johnson"; return Results.json().render(person); } }
註解
看起來不錯,但是在它成熟之前我還是把它丟在一邊吧。
Play Framework
誕生時間: 2011
評分: 4/5
使用Play Framework 很容易地建立,構建和釋出 web 應用程式,支援 Java & Scala。它使用Akka, 基於一個輕量級的無狀態的架構。它應該應用於大規模地低CPU和記憶體消耗的應用。
連結
優點
- 易於開發
- 快,但是沒有其它的一些框架快
- 基於 Netty, 支援非阻塞的 I/O. 並行處理遠端呼叫的時候很優秀
- 社群很大
- 快速的專案構建和啟動
- 模組化
- MVC
- REST, JSON/XML, Web Sockets, non-blocking I/O
- 只需重新整理瀏覽器就可以看到最新的改變
- 支援Async
- 有出版的書
缺點
- 版本2.0 是最有爭議的Java框架。 切換至Switch to Scala made some Java developers outraged.
- 不向後相容; Play 2.X 重寫了
- 號稱輕量級,但有些臃腫
- SBT構建工具. 號稱 Maven 殺手, 但是從沒有優秀到替換它。難以學習和配置
- 非 servlet
- Breaking changes across releases
例子
package controllers import play.api._ import play.api.mvc._ class Application extends Controller { def hello(name: String) = Action { Ok("Hello " + name + "!") } }
註解
抱怨歸抱怨,我還是一直喜歡和首選這個框架。不幸的是,我只能給它4顆星。我堅信 基於JAX-RS的框架更適合 RESTful web services.
RestExpress
誕生時間: 2009
評分: 3/5
RestExpress是一個非容器的輕量級的 Netty HTTP棧的包裝, 以便更容易地建立 Java RESTful services.
RestExpress 目標是支援最好的 RESTful 實踐。
連結
優點
- 真正的微框架
- 頂級的效能,快,可靠
- XML/JSON
- 最老的也是最穩定的 RESTful 框架之一
缺點
- 沒有文件
- 幾乎沒有支援
- 很小的社群
例子
package com.example; import java.io.IOException; import io.netty.handler.codec.http.HttpMethod; import org.restexpress.RestExpress; public class Main { public static RestExpress startServer(String[] args) throws IOException { RestExpress server = new RestExpress(); MyResource r = new MyResource(); server.uri("/myapp/myresource", r) .method(HttpMethod.GET) .noSerialization(); server.uri("/myapp/myresource", r) .method(HttpMethod.POST); server.bind(8080); return server; } public static void main(String[] args) throws Exception { RestExpress server = startServer(args); System.out.println("Hit enter to stop it..."); System.in.read(); server.shutdown(); } }
註解
儘管這個框架超級快,我也不想推薦它。文件缺乏以及沒有支援使它成為一個欠佳的框架。看在速度的份上給它3顆星。
Restlet
誕生時間: 2005
評分: 4.5/5
Restlet 幫助Java程式設計師建立大規模的快速的符合 RESTful 架構模式的web api。
它提供了強大的路由和 filtering 系統。統一的client/server Java API. 滿足所有主要的平臺 (Java SE/EE, Google AppEngine, OSGi, GWT, Android) 以及提供了無數的擴充套件以滿足程式設計師的需求。
據我說知,它是第一個 java RESTful web 框架。很多公司都在用它,但是你可能從未聽說過它,好像它已經不可見了。
連結
優點
- 強大
- 企業級的框架
- 多平臺 Java SE, Java EE, Google Web Toolkit, Google AppEngine, Android, OSGi environments
- 支援JAX-RS (就像 Jersey)
- 大部分高階 RESTful 支援
- 模組化
- 支援其它庫
- 開發一直活躍
- 智慧的url繫結, 全功能的 URI 路由
- 有相關的書籍
缺點
- 非常陡峭的學習曲線
- 關閉的社群,儘管 StackOverflow 上還是開放的
- 不再流行,更多的是因為 Play Framework 和 Jersey
例子
public class Part03 extends ServerResource { public static void main(String[] args) throws Exception { // Create the HTTP server and listen on port 8182 new Server(Protocol.HTTP, 8182, Part03.class).start(); } @Get("txt") public String toString() { return "hello, world"; } }
註解
儘管這個框架還一直流行,考慮到它的年紀和當前的完成度,我不能給它5顆星。
Restx
誕生時間: 2013
評分: 3.5/5
Restx 是一個輕量級的,模組化的,特性眾多的,超快的開源 Java REST 框架。
連結
優點
- 快速,輕量級
- 容易搭建
- 真正的微框架
- 模組化
- 支援其它庫
- 支援MongoDB
缺點
- 不友好的令人迷惑的文件。對於這類框架我期望能有好一點的文件
- 太年輕
- 目前還不支援非同步Async
例子
@GET("/message/{id}") public Message sayHello(String id, // path param String who // query param ) { return new Message().setMessage(String.format( "hello %s, it's %s", who, DateTime.now().toString("HH:mm:ss"))); } @POST("/message/{id}") public Message sayHello(String id, // path param Message msg // body param ) { return msg.setMessage(String.format( "%s @ %s", msg.getMessage(), DateTime.now().toString("HH:mm:ss"))); }
註解
真心來講我沒有在這個框架上花費太多時間。不值得在另一個框架上花費太多精力,我意思是說,Java框架市場已經越來越碎片化了,就像 JavaScript 市場,應該停止這種趨勢了。
Spark Framework
誕生時間: 2011
評分: 3.5/5
不要和 Apache 的大資料框架 Spark 弄混, 這裡的 Spark 框架是一個輕量級的 Java web 框架,用來進行快速的開發(50% Spark使用者使用 Spark 建立 REST APIs)。 它受 Ruby 框架 Sinatra 啟發。
它有一個不到1M的最小化的核心, 提供了所有基本的特性, 用來構建 RESTful 或者傳統的 web 應用程式。
連結
優點
- 快,輕量級
- 優秀的快速原型
- 易於搭建
- 經常和AngularJS搭配使用
- 真正的微框架
- 使用 Jetty
- 可以用在容器中或者獨立執行
缺點
- 文件可以更好,它不適合初學者
- 不適合大型專案
- 社群小
例子
import static spark.Spark.*; public class HelloWorld { public static void main(String[] args) { get("/hello", (req, res) -> "Hello World"); } }
註解
這個框架適合初始開發。主要用作小小專案或者原型。
相關文章
- 10個最好的Node.js MVC框架Node.jsMVC框架
- 8個超實用的Java測試工具和框架Java框架
- 8 個最好的 jQuery 樹形 Tree 外掛jQuery
- 最好的 Go 框架:沒有框架?Go框架
- Web前端開發最好用的幾個WebGL框架Web前端框架
- 10個最好的 JavaScript 動畫庫和開發框架JavaScript動畫框架
- 15個最好用的Node.JS後端框架Node.js後端框架
- datastack - 基於koa的RESTful框架ASTREST框架
- k8s APIServer依賴的go-restful WebService框架的簡單使用K8SAPIServerGoRESTWeb框架
- java8之ForkJoin框架的使用Java框架
- 10個用於Web開發的最好 Python 框架WebPython框架
- 請問大俠,DAO的開源框架哪個最好?框架
- python django中restful框架的使用PythonDjangoREST框架
- 值得探索的 8 個機器學習 JavaScript 框架機器學習JavaScript框架
- 6個最好的 HTML5/CSS3 演示(PPT)框架HTMLCSSS3框架
- 最好的8款防毒軟體防毒
- 一個Java的Actor框架:kilimJava框架
- 【flask框架】——flask-restful風格Flask框架REST
- RESTFul Web Api 服務框架(一)RESTWebAPI框架
- 用於Web開發的8 個最好的跨平臺編輯器Web
- 8個高效的Python爬蟲框架分享!Python爬蟲框架
- 8個強大的基於Bootstrap的CSS框架bootCSS框架
- 2013最好的PHP開發框架PHP框架
- [java]如何裂解RESTful的冪等性JavaREST
- Java8的八個新特性Java
- 8個實用的Java Streams APIJavaAPI
- 手遊盒子app哪個最好 最好的手機遊戲盒子APP遊戲
- Python flask-restful框架講解PythonFlaskREST框架
- 8個值得關注的SQL-on-Hadoop框架SQLHadoop框架
- 求遍歷網頁每一個節點的框架,最好是 python 寫的網頁框架Python
- 8個Python爬蟲框架,你知道幾個?Python爬蟲框架
- Java 8的18個常用日期處理Java
- Java8的一個小缺點Java
- 8 個最好的 PHP 加密貨幣市場實時價格指令碼集PHP加密指令碼
- Java程式設計師:這是一個最好的時代,也是一個最壞的時代Java程式設計師
- golang restful 框架之 go-swaggerGolangREST框架Swagger
- SOAP和RESTful框架的簡介、對比和區別REST框架
- 8個最高效的Python爬蟲框架,你用過幾個?Python爬蟲框架