最好的8个 Java RESTful 框架

标签: 最好 java restful | 发表时间:2015-11-17 14:05 | 作者:
出处:http://www.iteye.com
原文: Top 8 Java RESTful Micro Frameworks
译文来自: http://colobu.com/
过去的每一年,涌现出越来越多的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.

链接
官方站点 GITHUB 文档

优点
  • 快速的项目构建和启动
  • 模块化
  • 无可思议的快(至少根据内建的 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 框架。

链接
官方站点 GITHUB 文档

优点
  • 优秀的文档和例子
  • 快速
  • 超级容易的路由
  • 平滑的 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中就可以开始编码了。

链接
官方站点 GITHUB 文档

优点
  • 快速的项目构建和启动
  • 模块化
  • 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和内存消耗的应用。

链接
官方站点 GITHUB 文档

优点
  • 易于开发
  • 快,但是没有其它的一些框架快
  • 基于 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 实践。

链接
GITHUB

优点
  • 真正的微框架
  • 顶级的性能,快,可靠
  • 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 框架。很多公司都在用它,但是你可能从未听说过它,好像它已经不可见了。

链接
官方站点 GITHUB 文档

优点
  • 强大
  • 企业级的框架
  • 多平台 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颗星。

Spark Framework

诞生时间: 2011
评分: 3.5/5
不要和 Apache 的大数据框架 Spark 弄混, 这里的 Spark 框架是一个轻量级的 Java web 框架,用来进行快速的开发(50% Spark用户使用 Spark 创建 REST APIs)。 它受 Ruby 框架 Sinatra 启发。

它有一个不到1M的最小化的内核, 提供了所有基本的特性, 用来构建 RESTful 或者传统的 web 应用程序。

链接
官方站点 GITHUB 文档

优点
  • 快,轻量级
  • 优秀的快速原型
  • 易于搭建
  • 经常和AngularJS搭配使用
  • 真正的微框架
  • 使用 Jetty
  • 可以用在容器中或者独立运行

缺点
  • 文档可以更好,它不适合初学者
  • 不适合大型项目
  • 社区小

例子
import static spark.Spark.*;
 
public class HelloWorld {
   public static void main(String[] args) {
      get("/hello", (req, res) -> "Hello World");
   }
}

注解
这个框架适合初始开发。主要用作小小项目或者原型。

感谢 mengyidan1988 投递这篇资讯

资讯来源: http://colobu.com/

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [最好 java restful] 推荐:

最好的8个 Java RESTful 框架

- - ITeye资讯频道
原文: Top 8 Java RESTful Micro Frameworks. 译文来自: http://colobu.com/. 过去的每一年,涌现出越来越多的Java框架. 就像JavaScript,每个人都认为他们知道一个好的框架的功能应该是怎么样的. 连我的老祖母现在也使用一个我从来没有听说过而且可能永远不会使用的框架.

Java RESTful框架的性能比较

- - 鸟窝
在微服务流行的今天,我们会从纵向和横向分解代码的逻辑,将一些独立的无状态的代码单元实现为微服务,可以将它们发布到一些分布式计算单元或者Docker中,并在性能需要的时候及时地创建更多的服务单元. 微服务是一个概念,并没有规定服务的格式,但是很多厂商和框架都不约而同的采用RESTful的架构,尽管也有一些其它的性能很好的RPC框架.

elasticsearch RESTful搜索引擎-(java jest 使用[入门])

- - zzm
elasticsearch简称ES. 好吧下面我介绍下jest(第三方工具),个人认为还是非常不错的...想对ES用来更好,多多研究源代码吧...迟点,会写一些关于ES的源代码研究文章,现在暂时还是入门的阶段.哈..(不敢,不敢). 它是ES的java客户端,基于http restful.... jest是开源的....其他就不清楚了,看源代码吧..哈..

理解RESTful架构

- InterMa - 阮一峰的网络日志
越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点. 网站开发,完全可以采用软件开发的模式. 但是传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间的通信.

SOAP Webservice和RESTful Webservice

- - 人月神话的BLOG
REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性. REST提出设计概念和准则为:. 1.网络上的所有事物都可以被抽象为资源(resource). 2.每一个资源都有唯一的资源标识(resource identifier),对资源的操作不会改变这些标识.

Hoop:Hadoop HDFS的RESTFul封装

- Vent - NoSQLFan
Hoop是对Hadoop HDFS Proxy 的改良重写,为Hadoop HDFS提供了HTTP(S)的访问接口. 通过标准的HTTP协议访问你的HDFS系统. 在运行不同版本的HDFS之间进行数据交换(这克服了一些RPC方式因版本不同而产生的兼容性问题). 将对HDFS的操作置于防火墙的保护下.

rrestjs高性能restful框架

- - CNode社区
rrestjs(ROA-Restful js)是在expressjs代码的基础上开发的(这样可以减少很多bug,同时要感谢expressjs作者visionmedia无私的奉献),不过整个框架结构已经完全改变了,属性以及方法定义也是全新的,可以说是一个全新的node.js框架. 先献上一个简单的hello world 的例子吧:.

RESTful API 设计指南

- - 阮一峰的网络日志
网络应用程序,分为前端和后端两个部分. 当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备......). 因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信. 这导致API构架的流行,甚至出现 "API First"的设计思想. RESTful API是目前比较成熟的一套互联网应用程序的API设计理论.

Restful 和 Jersey介绍(Web Service )

- - CSDN博客架构设计推荐文章
REST 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之一. REST 中最重要的概念是资源(resources) ,使用全球 ID(通常使用 URI)标识. 客户端应用程序使用 HTTP 方法(GET/ POST/ PUT/ DELETE )操作资源或资源集.