阅读更多

1顶
1踩

编程语言

转载新闻 最好的8个 Java RESTful 框架

2015-11-17 14:05 by 副主编 mengyidan1988 评论(1) 有9146人浏览
原文: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");
   }
}

注解
这个框架适合初始开发。主要用作小小项目或者原型。
1
1
评论 共 1 条 请登录后发表评论
1 楼 mangguo 2015-11-19 09:34
这里有在线练习环境,大家可以试试:
http://www.hubwiz.com/course/555999807f0619e7325a6e78/

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 最好的8个Java RESTful框架

    最好的8个Java RESTful框架,需要的朋友可以参考下

  • 8 个最好的 Java RESTful 框架

    易于开发 快,但是没有其它的一些框架快 基于 Netty, 支持非阻塞的 I/O. 并行处理远程调用的时候很优秀 社区很大 快速的项目构建和启动...主要是这个框架使用最好的现代的Java web 组件,组装成一个简单易用的框架。...

  • ICERest:一个极简的、让人倍感呵护的java restful框架

    ICEREST是一个非常轻量级只有200k左右的RESTful路由框架,通过ICEREST你可以处理url的解析,数据的封装,Json的输出,和传统的方法融合,请求的参数便是方法的参数,方法的返回值便是请求的返回值,原则就是:你会写...

  • java rest 框架对比_Java RESTful 框架的性能比较

    来源:鸟窝,colobu.com/2015/11/17/Jax-RS-Performance-Comparison/在微服务流行的今天,我们会从纵向和横向分解代码的...微服务是一个概念,并没有规定服务的格式,但是很多厂商和框架都不约而同的采用RESTful的...

  • Java Restful风格-Jersey RESTful 框架入门

    Jersey RESTful 框架是开源的RESTful框架, 实现了JAX-RS (JSR 311 &amp; JSR 339) 规范。它扩展了JAX-RS 参考实现, 提供了更多的特性和工具, 可以进一步地简化 RESTful service 和 client 开发。 Jersey入门案例:...

  • Java RESTful框架的性能比较

    在微服务流行的今天,我们会从纵向和横向分解代码的逻辑,将一些独立的无状态的代码单元实现为微服务,可以将它们发布到一些分布式计算单元或者Docker中,并在...如何在Java生态圈选择一个轻量级的RESTful框架?可以参

  • Gromacs中文手册5.0.2.pdf

    Gromacs中文手册5.0.2

  • tensorflow_transform-0.1.0-py2-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • tensorflow_recommenders-0.3.1-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • python冒泡排序(Bubble Sort).docx

    python冒泡排序(Bubble Sort) 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 以下是一个用Python实现的冒泡排序的例子: ```python def bubble_sort(lst): n = len(lst) for i in range(n): # 创建一个标记,用于优化 swapped = False # 遍历所有未排序的元素 for j in range(0, n-i-1): # 交换相邻元素,如果它们的顺序错误 if lst[j] > lst[j+1] : lst[j], lst[j+1] = lst[j+1], lst[j] swapped = True # 如果在内循环中没有交换

  • A1_SSE_123090177.py

    A1_SSE_123090177.py

  • asp代码ASP基于WEB的商场管理系统的设计与实现(源代码+论文)

    asp代码ASP基于WEB的商场管理系统的设计与实现(源代码+论文)本资源系百度网盘分享地址

  • tensorflow_onmttok_ops-0.2.0-cp35-cp35m-manylinux2014_x86_64.whl

    算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • 三菱PLC例程源码S2401佑倡油压机

    三菱PLC例程源码S2401佑倡油压机本资源系百度网盘分享地址

  • Modown v4.3资源下载WordPress主题

    Modown是模板兔基于Erphpdown wordpress下载插件开发的一款全新的针对收费付费下载资源的WordPress主题,一款为erphpdown而生的wp主题。此主题不包含erphpdown插件(免激活版)价值199元。注意在其他地方购买可能不包含插件,还要自己去购买插件,而且不一定是免激活版。 自适应响应式设计,兼容主流浏览器 网格样式与瀑布流样式任意切换 自带与主题UI完美兼容搭配的erphpdown前端用户中心页面(此功能若单独找我们定制也需要几百) 首页banner处可以换成幻灯片、增加搜索框、按钮等 分类多重筛选(每个分类的筛选标签可自定义) 自定义文章类型(博客或教程等等),文章列表显示 一键社交账号登录,自定义的登录注册找回密码页面模板(含验证码) 多个小工具以及页面模板(前端投稿页面) CMS式首页模板(显示多个分类板块,可子分类筛选) Ajax无刷新评论 集成ckplayer视频播放器(使用短代码 [ckplayer]视频地址[/ckplayer]) 外链特色图片,列表页文章图片可自定义高度 文章单栏与双栏切换,可点赞收藏 特点说多了等于扯淡,惊喜等你来

  • python冒泡排序.md

    python冒泡排序 冒泡排序的时间复杂度为O(n^2),其中n是列表的长度。这是因为对于每个元素,我们可能需要与其后面的所有元素进行比较和交换。尽管冒泡排序在某些情况下可能不是最优的选择,特别是当处理大型数据集时,但它易于理解和实现,对于初学者来说是一个很好的起点。 值得注意的是,冒泡排序在最好的情况下(即列表已经排序)的时间复杂度为O(n),但这种情况很少发生。通常,我们讨论冒泡排序的时间复杂度时,我们指的是其平均和最坏情况,即O(n^2)。 冒泡排序的一个优化是,如果在一次遍历中没有发生任何交换,那么列表已经排序完成,我们可以提前终止算法。这可以避免不必要的比较和交换操作。下面是优化后的冒泡排序代码:

  • 理工科研究生简历模板,美观且信息量足

    春招秋招应届生必备,美观大方排版好看简历模板,需要word版本或者需要简历指导可以私。

  • 基于深度学习的USPS手写体识别模型.zip

    人工智能毕业设计&课程设计

  • 基于PaddleOCR重构,并且脱离PaddlePaddle深度学习训练框架的OCR.zip

    人工智能毕业设计&课程设计

Global site tag (gtag.js) - Google Analytics