最好的8个 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 controllersimport 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 框架的更多相关文章
- Java Restful框架:Jersey入门示例(官方例子)
本文主要介绍了Java Restful框架Jersey入门例子(来源于官方网站https://jersey.java.net/),废话不多说进入正题. 在Jersey官方示例中(https://jer ...
- Java RESTful 框架的性能比较
来源:鸟窝, colobu.com/2015/11/17/Jax-RS-Performance-Comparison/ 如有好文章投稿,请点击 → 这里了解详情 在微服务流行的今天,我们会从纵向和横向 ...
- Java RESTful 框架
[转载] 最好的8个 Java RESTful 框架 - 2015 Top 8 Java RESTful Micro Frameworks – Pros/Cons - 2017 Restlet - f ...
- Java RESTful框架的性能比较
https://colobu.com/2015/11/17/Jax-RS-Performance-Comparison/
- 如何在Java生态圈选择一个轻量级的RESTful框架?
在微服务流行的今天,我们会从纵向和横向分解代码的逻辑,将一些独立的无状态的代码单元实现为微服务,可以将它们发布到一些分布式计算单元或者Docker中,并在性能需要的时候及时地创建更多的服务单元.微服务 ...
- Java+Netty实现的RESTful框架--netty-rest-server
在工作中用Netty做了几个服务,感觉Netty做出来的程序性能好,资源占用少,但是实现Http服务比较麻烦,于是就参考Spring MVC的注解基于Netty实现了一个轻量级的RESTful框架. ...
- RESTful框架调研
背景 当前的开放服务平台发展趋势,是服务使用者变得多种多样,其中既有各种前端设备(台式机.手机等),又有各种后端服务器,因此必须有一个统一的机制,方便各种服务使用者和开放服务平台进行通信.为了更好的实 ...
- Java Restful Web Service 学习指南
Restful是一种架构style,目前常说的有restful web service, resultful http.现在热搜榜的微服务,大多数会采用Restful方式. JAX-RS 作为一个Re ...
- JAVA web 框架集合
“框架”犹如滔滔江水连绵不绝, 知道有它就好,先掌握自己工作和主流的框架: 在研究好用和新框架. 主流框架教程分享在Java帮帮-免费资源网 其他教程需要时间制作,会陆续分享!!! 152款框架,你还 ...
随机推荐
- Algolia使用教程 , 超详细傻子看都会
框架描述 发现网上Algolia这块的资料较少,就花了点时间从官网上整理了下,总结了几项常用的功能用法. 现在比较有名的Algolia提供了云搜索的服务.具体办法是我们将数据库的信息以JSON的格式上 ...
- IDEA配置maven(配置阿里云中央仓库)
前言 idea配置maven后如果不修改中央仓库地址创建maven则出奇的慢,不管你用MyEclipse还是idea都慢的不要不要的,实在不能忍受. 这种条件下发现一个阿里云中央仓库来点福利,有福利了 ...
- asp.net mvc 碰到 XML 解析错误:找不到根元素 位置
具体报错信息如下: XML 解析错误:找不到根元素 位置:moz-nullprincipal:{4a1d2b7c-6d07-468e-9df9-2267a0422c93} 行 1,列 1: 网上给出的 ...
- T-SQL基础(一)之简单查询
名词解释 SQL: Structured Query Language,结构化查询语言,是一种在关系型数据库中用于管理数据的标准语言.SQL是一种声明式编程语言,即只需表明需要什么而无需关注实现细节( ...
- ASP.NET Identity 三(转载)
转载来源:http://www.cnblogs.com/r01cn/p/5194257.html 注:本文是[ASP.NET Identity系列教程]的第三篇.本系列教程详细.完整.深入地介绍了微软 ...
- 【Quartz】1、Quartz使用说明
简介 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz 允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和触发器的多对多关系,还 ...
- netty 基础
Netty是一个高性能.异步事件驱动的NIO框架,提供了对TCP.UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户 ...
- css文本溢出隐藏显示省略号(单行+多行)
文本超出若干行就换行,这个功能几乎每个文本浏览网站都会用到,实现它的办法也有很多,今天简单的介绍一下实现它的方法. 一. 单行文本不换行,并将超出文本隐藏 .box-content{ ove ...
- HTML--Canvas基础入门
一 HTML5画布基本介绍 1.HTML5专门为画布功能提供的标签:<canvas>,所以画布相关的功能都是基于这个标签来完成的; <canvas id="canvas&q ...
- python学习之解决中英文混合输出的排版问题
在python的格式输出时常使用format()方法,其中的多余空间默认使用英文空格作为占位符,不方便中英混合时的格式输出,因此我们要为其中的中文字符串使用占字符较大的中文空格符作为多余空间的占位符. ...