過去的每一年,涌現(xiàn)出越來越多的java框架。就像JavaScript,每個人都認為他們知道一個好的框架的功能應(yīng)該是怎么樣的。連我的老祖母現(xiàn)在也使用 一個我從來沒有聽說過而且可能永遠不會使用的框架。玩笑歸玩笑,可以做幾乎任何事的臃腫的框架市場已經(jīng)飽和,,但是如何評判呢?這篇文章旨在提供目前最好的 Java RESTfulful 框架。我只介紹輕量級的產(chǎn)品, 略過了那些臃腫的過度設(shè)計的框架。同時,我只想要他們穩(wěn)定和成熟,提供簡單,輕量級的特點。我只在介紹Play frameworks時打破這條規(guī)則,理由稍后給出。在將來的項目中使用哪個 Java RESTful框架完全取決于你當前的需求。為了便于你取舍,我將列出最突出的框架功能,希望這能節(jié)省一些你的時間。
誕生時間: 2011
評分: 4.5/5
Dropwizard 提供了穩(wěn)定成熟的Java庫, 并封裝成一個簡單的輕量級的包。
Dropwizard 介于框架和庫之間。它提供了一個開發(fā)web應(yīng)用程序的全部所需。由于內(nèi)置模塊化,一個應(yīng)用程序可以保持小而精干的特點,減少開發(fā)和維護的時間,減少負擔。
Dropwizard 使用已有的 Jetty HTTP 庫,嵌入到你的項目中,無需外部的server。所有的Dropwizard項目都有一個 main 方法來管理內(nèi)建的 HTTP server.
鏈接
官方站點 GITHUB 文檔
優(yōu)點
缺點
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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 } } |
注解
個人不想為大的項目推薦這個框架。不過如果你想嘗試的話,你不會失望的。主要是這個框架使用最好的現(xiàn)代的Java web 組件,組裝成一個簡單易用的框架。
不幸的是這也帶來了它的問題。 將這些庫糅合起來可能導(dǎo)致不可預(yù)見的問題。這也是我為什么給它減掉0.5顆星,而沒有評為滿分5顆星。
誕生時間: 2012 (Jersey 2.X)
評分: 5/5
Jersey RESTful 框架是開源的RESTful框架, 實現(xiàn)了JAX-RS (JSR 311 & JSR 339) 規(guī)范。它擴展了JAX-RS 參考實現(xiàn), 提供了更多的特性和工具, 可以進一步地簡化 RESTful service 和 client 開發(fā)。盡管相對年輕,它已經(jīng)是一個產(chǎn)品級的 RESTful service 和 client 框架。
鏈接
官方站點 GITHUB 文檔
優(yōu)點
缺點
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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顆星。
誕生時間: 2012
評分: 3.5/5
Ninja Web Framework是全棧的 java web framework。穩(wěn)定, 快速, 可靠, 產(chǎn)品級.
它提供了開發(fā),測試,發(fā)布,維護 RESTful web應(yīng)用的一切(Servlets, Guice, JPA, Flyway migrations, Maven, etc.).
就像 DropWizzard, Ninja Web Framework 是一個集成的軟件棧。你不必建立你自己的,只需使用 Maven archetype生成一個新的項目,導(dǎo)入到IDE中就可以開始編碼了。
鏈接
官方站點 GITHUB 文檔
優(yōu)點
缺點
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 | package controllers; public class ApplicationController { public Result index() { Person person = new Person(); person.name = "John Johnson" ; return Results.json().render(person); } } |
注解
看起來不錯,但是在它成熟之前我還是把它丟在一邊吧。
誕生時間: 2011
評分: 4/5
使用Play Framework 很容易地創(chuàng)建,構(gòu)建和發(fā)布 web 應(yīng)用程序,支持 Java & Scala。它使用Akka, 基于一個輕量級的無狀態(tài)的架構(gòu)。它應(yīng)該應(yīng)用于大規(guī)模地低CPU和內(nèi)存消耗的應(yīng)用。
鏈接
官方站點 GITHUB 文檔
優(yōu)點
缺點
例子
1 2 3 4 5 6 7 8 9 10 11 12 | 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.
誕生時間: 2009
評分: 3/5
RestExpress是一個非容器的輕量級的 Netty HTTP棧的包裝, 以便更容易地創(chuàng)建 Java RESTful services.
RestExpress 目標是支持最好的 RESTful 實踐。
鏈接
GITHUB
優(yōu)點
缺點
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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顆星。
誕生時間: 2005
評分: 4.5/5
Restlet 幫助Java程序員建立大規(guī)模的快速的符合 RESTful 架構(gòu)模式的web api。
它提供了強大的路由和 filtering 系統(tǒng)。統(tǒng)一的client/server Java API. 滿足所有主要的平臺 (Java SE/EE, Google AppEngine, OSGi, GWT, Android) 以及提供了無數(shù)的擴展以滿足程序員的需求。
據(jù)我說知,它是第一個 java RESTful web 框架。很多公司都在用它,但是你可能從未聽說過它,好像它已經(jīng)不可見了。
鏈接
官方站點 GITHUB 文檔
優(yōu)點
缺點
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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顆星。
誕生時間: 2013
評分: 3.5/5
Restx 是一個輕量級的,模塊化的,特性眾多的,超快的開源 Java REST 框架。
鏈接
官方站點 GITHUB 文檔
優(yōu)點
缺點
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | @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框架市場已經(jīng)越來越碎片化了,就像 Javascript 市場,應(yīng)該停止這種趨勢了。
誕生時間: 2011
評分: 3.5/5
不要和 Apache 的大數(shù)據(jù)框架 Spark 弄混, 這里的 Spark 框架是一個輕量級的 Java web 框架,用來進行快速的開發(fā)(50% Spark用戶使用 Spark 創(chuàng)建 REST APIs)。 它受 Ruby 框架 Sinatra 啟發(fā)。
它有一個不到1M的最小化的內(nèi)核, 提供了所有基本的特性, 用來構(gòu)建 RESTful 或者傳統(tǒng)的 web 應(yīng)用程序。
鏈接
官方站點 GITHUB 文檔
優(yōu)點
缺點
例子
1 2 3 4 5 6 7 | import static spark.Spark.*; public class HelloWorld { public static void main(String[] args) { get( "/hello" , (req, res) -> "Hello World" ); } } |
注解
這個框架適合初始開發(fā)。主要用作小小項目或者原型。
全能程序員交流QQ群290551701,聚集很多互聯(lián)網(wǎng)精英,技術(shù)總監(jiān),架構(gòu)師,項目經(jīng)理!開源技術(shù)研究,歡迎業(yè)內(nèi)人士,大牛及新手有志于從事IT行業(yè)人員進入!
新聞熱點
疑難解答