较好的8个 Java RESTful 框架

Java
301
0
0
2023-09-12
标签   Java框架

过去的每一年,涌现出越来越多的 Java 框架。就像JavaScript,每个人都认为他们知道一个好的框架的功能应该是怎么样的。在将来的项目中使用哪个 Java RESTful框架完全取决于你当前的需求。为了便于你取舍,我将列出最突出的框架功能,希望这能节省一些你的时间。

DROPWIZARD

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也很难升级

例子

注解

个人不想为大的项目推荐这个框架。不过如果你想尝试的话,你不会失望的。主要是这个框架使用最好的现代的Java web 组件,组装成一个简单易用的框架。

不幸的是这也带来了它的问题。 将这些库糅合起来可能导致不可预见的问题。这也是我为什么给它减掉0.5颗星,而没有评为满分5颗星。

Jersey

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 不可用

例子

NINJA WEB FRAMEWORK

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 用户创建的

例子

PLAY FRAMEWORK

使用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

例子

RESTEXPRESS

RestExpress是一个非容器的轻量级的 Netty HTTP栈的包装, 以便更容易地创建 Java RESTful services.

RestExpress 目标是支持最好的 RESTful 实践。

优点

  • 真正的微框架
  • 顶级的性能,快,可靠
  • XML/JSON
  • 最老的也是最稳定的 RESTful 框架之一

缺点

  • 没有文档
  • 几乎没有支持
  • 很小的社区

例子

RESTLET

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

例子

RESTX

Restx 是一个轻量级的,模块化的,特性众多的,超快的开源 Java REST 框架。

优点

  • 快速,轻量级
  • 容易搭建
  • 真正的微框架
  • 模块化
  • 支持其它库
  • 支持MongoDB

缺点

  • 不友好的令人迷惑的文档。对于这类框架我期望能有好一点的文档
  • 太年轻
  • 目前还不支持异步Async

例子

Spark FRAMEWORK

不要和 Apache 的大数据框架 Spark 弄混, 这里的 Spark 框架是一个轻量级的 Java web 框架,用来进行快速的开发(50% Spark用户使用 Spark 创建 REST APIs)。 它受 Ruby 框架 Sinatra 启发。它有一个不到1M的最小化的内核, 提供了所有基本的特性, 用来构建 RESTful 或者传统的 web 应用程序。

优点

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

缺点

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

例子