转载于:http://www.importnew.com/17138.html
过去的每一年,涌现出越来越多的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也很难升级
例子
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颗星。
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 不可用
例子
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颗星。
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 用户创建的
例子
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);
}
} |
注解
看起来不错,但是在它成熟之前我还是把它丢在一边吧。
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
例子
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.
RestExpress
诞生时间: 2009
评分: 3/5
RestExpress是一个非容器的轻量级的 Netty HTTP栈的包装, 以便更容易地创建 Java RESTful services.
RestExpress 目标是支持最好的 RESTful 实践。
链接
GITHUB
优点
- 真正的微框架
- 顶级的性能,快,可靠
- XML/JSON
- 最老的也是最稳定的 RESTful 框架之一
缺点
- 没有文档
- 几乎没有支持
- 很小的社区
例子
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颗星。
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
例子
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颗星。
Restx
诞生时间: 2013
评分: 3.5/5
Restx 是一个轻量级的,模块化的,特性众多的,超快的开源 Java REST 框架。
优点
- 快速,轻量级
- 容易搭建
- 真正的微框架
- 模块化
- 支持其它库
- 支持MongoDB
缺点
- 不友好的令人迷惑的文档。对于这类框架我期望能有好一点的文档
- 太年轻
- 目前还不支持异步Async
例子
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 市场,应该停止这种趋势了。
Spark Framework
诞生时间: 2011
评分: 3.5/5
不要和 Apache 的大数据框架 Spark 弄混, 这里的 Spark 框架是一个轻量级的 Java web 框架,用来进行快速的开发(50% Spark用户使用 Spark 创建 REST APIs)。 它受 Ruby 框架 Sinatra 启发。
它有一个不到1M的最小化的内核, 提供了所有基本的特性, 用来构建 RESTful 或者传统的 web 应用程序。
优点
- 快,轻量级
- 优秀的快速原型
- 易于搭建
- 经常和AngularJS搭配使用
- 真正的微框架
- 使用 Jetty
- 可以用在容器中或者独立运行
缺点
- 文档可以更好,它不适合初学者
- 不适合大型项目
- 社区小
例子
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" );
}
} |
注解
这个框架适合初始开发。主要用作小小项目或者原型。
相关推荐
以下是对标题和描述中提到的8个最佳Java RESTful框架的详细说明: 1. **Dropwizard** - Dropwizard是一个高度集成的Java框架,集合了多个成熟库,如Jetty(HTTP服务器)、Jersey(REST处理)、Jackson(JSON处理)...
"Java调用Restful API接口的方式" Java调用Restful API接口是Java开发中非常重要的一部分,了解Java调用Restful API接口的方式可以帮助开发者更好地理解和使用相关技术。本文将详细介绍Java调用Restful API接口的...
SpringBoot是Java领域中常用的微服务框架,它支持快速构建RESTful服务。 RESTClient是一款强大的开源HTTP接口测试工具,特别适合于测试RESTful服务。它允许开发者发送各种HTTP请求(如GET、POST、PUT等),并查看...
Java RESTful Web Service实战是Java开发领域中一个重要的实践教程,它主要涵盖了使用Java技术和RESTful架构风格来创建高效、可扩展的网络服务。REST(Representational State Transfer)是一种网络应用程序的设计...
在这个名为"interface_frame_demo"的项目中,我们可以看到一个针对RESTful接口实现的框架示例。 在RESTful设计中,接口通常通过HTTP协议来定义,使用不同的HTTP方法(GET、POST、PUT、DELETE等)来对应不同的操作。...
8. **部署和运行**: 将RESTful服务部署到Tomcat、Jetty或其他Java应用服务器,或者使用微服务框架如Quarkus、Spring Boot快速运行。 9. **最佳实践**: 学习如何设计RESTful API,遵循REST原则,如幂等性、无状态和...
RESTEasy是一个流行的JAX-RS(Java API for RESTful Web Services)实现,它允许开发者用注解来轻松地声明服务接口。例如,我们可以使用`@Path`注解来定义服务路径,`@GET`、`@POST`等注解来指定HTTP方法,以及`@...
1. **选择合适的框架**:Java提供了多种用于开发RESTful Web服务的框架,包括Spring Boot、Jersey和RestEasy等。Spring Boot因其强大的生态系统和简化配置的功能而受到广泛欢迎;Jersey则是Java EE 7标准的一部分,...
在本教程中,我们将探讨如何基于 Java Spring 框架将一个特定的类的方法对外提供 RESTful 服务并进行调用。首先,我们有一个名为 `Person` 的类,包含姓名 (name)、年龄 (age) 和性别 (gender) 属性,以及对应的 ...
### 基于RESTful框架Jersey的知识点详解 #### 一、Jersey RESTful框架简介 Jersey RESTful框架是一款开源的RESTful框架,它实现了JAX-RS(JSR 311 & JSR 339)规范。JAX-RS是一种Java API,用于开发RESTful web...
在Java中,最常用的RESTful框架有Jersey和Spring Boot。Jersey是JAX-RS规范的参考实现,而Spring Boot则通过其Spring MVC模块提供了对REST的支持。这些框架简化了创建和消费REST服务的过程,通过注解即可轻松定义...
以下是一个基于Java Spring Boot框架实现RESTful接口的示例代码: ```java import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/users") public class UserController { @...
Jersey框架是Java实现RESTful Web服务的常用框架,提供了一个简单易用的方式来创建RESTful Web服务。 在本文中,我们讨论了如何使用Java创建RESTful Web服务,包括如何使用Jersey框架创建RESTful Web服务的示例代码...
该项目为基于OkHttp实现的Java标准RESTful风格网络框架设计源码,包含280个文件,其中涵盖192个Java源文件、47个XML配置文件、11个Gradle构建文件、7个JAR库文件、6个Git忽略文件、5个属性文件以及2个图像文件。...
分享一个Android和java调用RESTful Web...Resting,在Java的一个轻量级的REST框架,可用于调用一个RESTful Web服务,并转换成响应来自客户端应用程序定制的Java对象。由于它的简单,resting是适合Android等手持设备。
1. **Java后端开发**:在Java中,我们通常使用Spring Boot框架来构建RESTful API,因为它提供了丰富的功能和简洁的配置。Spring MVC模块是Spring Boot中的关键部分,用于处理HTTP请求。我们可以定义控制器类,使用`@...
- **JBoss's JAX-RS RESTEasy**:基于JAX-RS标准的RESTful框架,提供了一系列扩展来简化RESTful服务的开发。 - **Struts 2 with the REST plugin**:Struts 2是一个流行的MVC框架,通过集成REST插件支持RESTful...