过去的每一年,涌现出越来越多的java框架。就像JavaScript,每个人都认为他们知道一个好的框架的功能应该是怎么样的。连我的老祖母现在也使用 一个我从来没有听说过而且可能永远不会使用的框架。玩笑归玩笑,可以做几乎任何事的臃肿的框架市场已经饱和,,但是如何评判呢?这篇文章旨在提供目前最好的 Java RESTfulful 框架。我只介绍轻量级的产品, 略过了那些臃肿的过度设计的框架。同时,我只想要他们稳定和成熟,提供简单,轻量级的特点。我只在介绍Play frameworks时打破这条规则,理由稍后给出。在将来的项目中使用哪个 Java RESTful框架完全取决于你当前的需求。为了便于你取舍,我将列出最突出的框架功能,希望这能节省一些你的时间。
诞生时间: 2011
评分: 4.5/5
Dropwizard 提供了稳定成熟的Java库, 并封装成一个简单的轻量级的包。
Dropwizard 介于框架和库之间。它提供了一个开发web应用程序的全部所需。由于内置模块化,一个应用程序可以保持小而精干的特点,减少开发和维护的时间,减少负担。
Dropwizard 使用已有的 Jetty HTTP 库,嵌入到你的项目中,无需外部的server。所有的Dropwizard项目都有一个 main 方法来管理内建的 HTTP server.
链接
官方站点 GITHUB 文档
优点
缺点
例子
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 } } |
注解
个人不想为大的项目推荐这个框架。不过如果你想尝试的话,你不会失望的。主要是这个框架使用最好的现代的Java web 组件,组装成一个简单易用的框架。
不幸的是这也带来了它的问题。 将这些库糅合起来可能导致不可预见的问题。这也是我为什么给它减掉0.5颗星,而没有评为满分5颗星。
诞生时间: 2012 (Jersey 2.X)
评分: 5/5
Jersey RESTful 框架是开源的RESTful框架, 实现了JAX-RS (JSR 311 & JSR 339) 规范。它扩展了JAX-RS 参考实现, 提供了更多的特性和工具, 可以进一步地简化 RESTful service 和 client 开发。尽管相对年轻,它已经是一个产品级的 RESTful service 和 client 框架。
链接
官方站点 GITHUB 文档
优点
缺点
例子
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。稳定, 快速, 可靠, 产品级.
它提供了开发,测试,发布,维护 RESTful web应用的一切(Servlets, Guice, JPA, Flyway migrations, Maven, etc.).
就像 DropWizzard, Ninja Web Framework 是一个集成的软件栈。你不必建立你自己的,只需使用 Maven archetype生成一个新的项目,导入到IDE中就可以开始编码了。
链接
官方站点 GITHUB 文档
优点
缺点
例子
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 很容易地创建,构建和发布 web 应用程序,支持 Java & Scala。它使用Akka, 基于一个轻量级的无状态的架构。它应该应用于大规模地低CPU和内存消耗的应用。
链接
官方站点 GITHUB 文档
优点
缺点
例子
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栈的包装, 以便更容易地创建 Java RESTful services.
RestExpress 目标是支持最好的 RESTful 实践。
链接
GITHUB
优点
缺点
例子
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程序员建立大规模的快速的符合 RESTful 架构模式的web api。
它提供了强大的路由和 filtering 系统。统一的client/server Java API. 满足所有主要的平台 (Java SE/EE, Google AppEngine, OSGi, GWT, Android) 以及提供了无数的扩展以满足程序员的需求。
据我说知,它是第一个 java RESTful web 框架。很多公司都在用它,但是你可能从未听说过它,好像它已经不可见了。
链接
官方站点 GITHUB 文档
优点
缺点
例子
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 文档
优点
缺点
例子
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框架市场已经越来越碎片化了,就像 Javascript 市场,应该停止这种趋势了。
诞生时间: 2011
评分: 3.5/5
不要和 Apache 的大数据框架 Spark 弄混, 这里的 Spark 框架是一个轻量级的 Java web 框架,用来进行快速的开发(50% Spark用户使用 Spark 创建 REST APIs)。 它受 Ruby 框架 Sinatra 启发。
它有一个不到1M的最小化的内核, 提供了所有基本的特性, 用来构建 RESTful 或者传统的 web 应用程序。
链接
官方站点 GITHUB 文档
优点
缺点
例子
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" ); } } |
注解
这个框架适合初始开发。主要用作小小项目或者原型。
全能程序员交流QQ群290551701,聚集很多互联网精英,技术总监,架构师,项目经理!开源技术研究,欢迎业内人士,大牛及新手有志于从事IT行业人员进入!
新闻热点
疑难解答