阅读更多

1顶
1踩

编程语言

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

2015-11-17 14:05 by 副主编 mengyidan1988 评论(1) 有9231人浏览
原文: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框架?可以参

  • 2023-04-06-项目笔记 - 第二百六十一阶段 - 4.4.2.259全局变量的作用域-259 -2025.09.19

    2023-04-06-项目笔记-第二百六十一阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.259局变量的作用域_259- 2024-09-19

  • 采用Spring+Struts2+Hibernate框架,实现一个仿天猫购物网站的web工程(毕设&课设&实训&大作业&竞赛&项

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

  • 人工智能赋能数据中心的绿色节能策略

    本文阐述了人工智能在数据中心节能应用领域的理论与实践,通过介绍机器学习和基于物理机理模型的人工智能节能技术的应用情况,展示了如何利用AI技术来提升数据中心能源效率,减少PUE。并指出基于大数据分析的智能运维方法能优化数据中心冷却系统的运行状态,从而达成绿色节能目的;同时也强调了未来的节能系统发展趋势及标准化推进措施等重要方向。 适用人群:数据中心管理人员,环保工作者,信息和通信技术行业的专业人士。 使用场景及目标:适用于那些希望利用AI和其他技术优化其数据中心效能的企业;通过技术手段达到减少能耗、提升工作效率的目的。 其他:随着全球对环境友好技术的关注增加,在数据中心的建设和运维过程中融合AI等新技术已经成为必然趋势。

  • 基于java的网上球鞋竞拍系统设计与实现.docx

    基于java的网上球鞋竞拍系统设计与实现.docx

  • C语言入门教程.zip

    【c语言入门】 静态库、动态链接库、include、makefile、io、文件操作函数、管道原理及应用、简单的数据结构

  • 基于java中药分类管理系统设计与实现.docx

    基于java中药分类管理系统设计与实现.docx

  • 基于频谱旋转ωk算法大斜视SAR动目标成像

    内容概要:文中针对大斜视SAR系统在动目标成像上遇到的各种问题,包括聚焦难、几何变形和交叉副瓣高等挑战,采用了一个融合了频谱旋转和稀疏化增强处理方式的新颖算法——频谱旋转ωk算法,进行了详细讨论并提供了一套完整解决方案。 适用人群:该研究对于SAR技术研究专家、学者、工程师有着特别的实际意义与价值。 使用场景及目标:本成果可应用于斜视角达到甚至超过七十度的高斜度SAR动目标成像系统中,提升动目标检测、定位、识别等能力。具体应用场景涵盖了战场态势监测、交通流量监管等多个领域。 本文通过详细的理论建模及仿真实验结果论证算法的有效可行性;此外,文中提及了未来在更高动态环境下SAR成像领域的扩展可能性。

  • 基于java的新闻发布系统设计与实现.docx

    基于java的新闻发布系统设计与实现.docx

  • 基于java的应急资源管理系统设计与实现.docx

    基于java的应急资源管理系统设计与实现.docx

  • 基于java的斗车交易系统设计与实现.docx

    基于java的斗车交易系统设计与实现.docx

  • 通感一体化在车联网中的应用前景与关键技术

    主要内容:文章探讨了随着6G通讯技术发展,将通感一体化应用于车联网的可能性及其带来的显著效果,尤其是在辅助自动驾驶、多车合作感知与控制、车路通感融合发展中的应用。通过阐述各方面的技术框架和细节(如波束管理和智能反射面技术),文中指出了车联网系统在实现高效率、安全性以及智能化管理上的关键突破。同时强调在实施中遇到诸如频带分配、信号混迭、硬件整合等现实挑战,并提出了未来发展方向。 适用人群:研究人员和开发人员,特别是从事车联网和新一代通讯技术支持的专业人士。 使用场景及目标:适用于车联网的研究和开发,目的是构建高效的交通通信系统,在实际使用中促进自动驾驶、智能交通管理系统等新技术落地,提高道路通行的安全性和效率。 相关背景与建议:本文对通感一体化的技术介绍深入浅出,并讨论了一系列技术前沿,包括智能反射技术的最新成果。阅读者应掌握一定的无线通讯基础知识,并能理解技术理论在工程实践里的潜在机遇与难题。

  • #_ssm_156_mysql_高校设备管理系统_.zip

    均包含代码,文章,部分项目包含ppt

  • #_ssm_098_mysql_个性化电子相册设计_.zip

    均包含代码,文章,部分项目包含ppt

Global site tag (gtag.js) - Google Analytics