8 个最好的 Java RESTful 框架

使用Java实现RESTful Web Services框架的简要步骤 当然,这只是一个简单的例子,实际上,你可以根据自己的需求和项目的复杂度,使用不同的库和框架来实现更为强大和灵活的RESTful Web Services。在Java中实现RESTful Web Services,我们可以使用一些流行的库和框架,如Java Servlet API、Jersey或Spring Boot。在你的Java项目中,添加相应的依赖库,以便能够使用这些库和框架。你可以选择使用Java内置的服务器,如Tomcat,或者使用其他的服务器,如Jetty。根据你选择的服务器,进行相应的配置。 阅读详情




过去的每一年,涌现出越来越多的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颗星。




Restx

诞生时间: 2013
评分: 3.5/5

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

链接

官方站点 GITHUB 文档

优点

快速,轻量级

容易搭建

真正的微框架

模块化

支持其它库

支持MongoDB

缺点

不友好的令人迷惑的文档。对于这类框架我期望能有好一点的文档

太年轻

目前还不支持异步Async

例子

@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 应用程序。

链接

官方站点 GITHUB 文档

优点

快,轻量级

优秀的快速原型

易于搭建

经常和AngularJS搭配使用

真正的微框架

使用 Jetty

可以用在容器中或者独立运行

缺点

文档可以更好,它不适合初学者

不适合大型项目

社区小

例子

import static spark.Spark.*;

public class HelloWorld {
   public static void main(String[] args) {
      get("/hello", (req, res) -> "Hello World");
   }
}

注解

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


使用Spring MVC实现RESTful风格的Web应用 在当今的Web开发中,RESTful风格的架构已经成为了一种流行的选择。Spring MVC是一个强大的Java框架,它提供了完整的支持来构建RESTful风格的Web应用程序。本文将介绍如何使用Spring MVC来实现RESTful风格的Web应用,并提供相应的源代码示例。在你的项目中,你需要添加一些依赖来支持Spring MVC和RESTful功能。然后,我们定义了各种处理方法来处理GET、POST、PUT和DELETE请求,每个方法上都使用了适当的HTTP方法注解。在上面的示例代码中,我们使用了。 阅读详情

相关推荐

restful restful所需要的jar包

restful restful所需要的jar包 ========================================= Restlet, a RESTful Web framework for Java ========================================= http://www.restlet.org ----------------------------------------- Native REST support * Core REST concepts have equivalent Java classes (UniformInterface, Resource, Representation, Connector for example). * Suitable for both client-side and server-side web applications. The innovation is that that it uses the same API, reducing the learning curve and the software footprint. * Restlet-GWT module available, letting you leverage the Restlet API from within any Web browser, without plugins. * Concept of "URIs as UI" supported based on the URI Templates standard. This results in a very flexible yet simple routing with automatic extraction of URI variables into request attributes. * Tunneling service lets browsers issue any HTTP method (PUT, DELETE, MOVE, etc.) through a simple HTTP POST. This service is transparent for Restlet applications. Complete Web Server * Static file serving similar to Apache HTTP Server, with metadata association based on file extensions. * Transparent content negotiation based on client preferences. * Conditional requests automatically supported for resources. * Remote edition of files based on PUT and DELETE methods (aka mini-WebDAV mode). * Decoder service transparently decodes compressed or encoded input representations. This service is transparent for Restlet applications. * Log service writes all accesses to your applications in a standard Web log file. The log format follows the W3C Extended Log File Format and is fully customizable. * Powerful URI based redirection support similar to Apache Rewrite module. Available Connectors * Multiple server HTTP connectors available, based on either Mortbay's Jetty or the Simple framework or Grizzly NIO framework. * AJP server connector available to let you plug behind an Apache HTT

最好的8个 Java RESTful 框架

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

super2007的专栏 3415

servlet restful需要的jar包和简单使用案例.zip

servlet restful需要的jar包和简单使用案例,示例以截图展示,结果返回{"status":true}。

pylibcudf 字符串与浮点数互转实战:to_floats、from_floats 与 is_float 的用法与底层实现

本文围绕 pylibcudf 字符串转换模块中的 `strings.convert.convert_floats` 子模块展开,系统讲解其在 cuDF(GPU DataFrame 库)中实现**字符串列 ↔ 浮点数列双向转换**与**字符串合法性预检**的三个核心 API:`to_floats`、`from_floats`、`is_float`。读完本文,你将掌握这三个函数的参数语义、格式约定(科

gitblog_00006的博客 531

金蝶云星空应用开发初级考试题目汇总

摘要:本文为金蝶云星空应用开发初级考试题目汇总

2401_86113757的博客 3799

开关电源三大基本拓扑:反激、正激与桥式选型本质

开关电源拓扑是电力电子系统设计的核心基础概念,其本质决定能量传递路径、器件应力分布与系统物理边界。反激拓扑以耦合电感形式实现隔离与升降压,适用于小功率AC-DC场景;正激拓扑依赖实时能量传递与强制复位机制,支撑中功率高效率需求;桥式拓扑(含推挽/半桥/全桥)通过电压应力分摊与双向磁化,成为大功率系统的刚性选择。理解三者在磁芯工作模式、电流连续性、直流偏磁抑制等方面的原理差异,直接关系到效率、温升、EMI及可靠性等关键技术指标。本文聚焦反激、正激、桥式三大工程级基本拓扑的物理本质与落地约束,揭示从需求参数到电

cqwmy840702的博客 376

Java框架(七)-- RESTful风格的应用

RestController在Controller类上添加,替换@Controller注解,让每个方法放回json数据,方法上无需再用@ResponseBody注解。在com.ql.restful.controller包下创建RestfulController.java类。启动项目,在浏览器地址栏中输入http://localhost:8080/restful/request。在webapp目录下引入jquery-3.6.0.min.js,并在该目录创建client.html。...

qq_32091929的博客 1589

Mike 21如何制作随水深变化的糙率文件

MIKE 21如何制作随水深变化的糙率文件

zhuzhujiayoua的博客 2250

最好的8个Java RESTful框架

java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。 最好的8个Java RESTful框架,需要的朋友可以参考下 过去的每一year,涌现出越来越多的Java框架。就像Java

架构师之路 2073

Clipper库中文帮助文档

引言: 第一次接触Clipper,主要是想用来处理DXF中的图形,网上也有博友翻译过,但是可惜打不开,好像那个网站https://love2.io凉凉了,但是优快云上也有博友分享了CHM,看着只剩3个下载币的我好无奈,一怒之下花费两天的时间将英文CHM也翻译了一遍,主要还是想在翻译的同时好好的理解Clipper,为使用打下坚实的基础。当然我也会无私的奉献出来。 简单的认识一下Clipper:...

zefllj的博客 3423

Android Framework WMS全面概述和知识要点

WindowManagerService 类是整个 WMS 的核心大脑,处于系统服务层,负责协调和管理所有与窗口相关的操作。它在 Android 系统架构中起到承上启下的关键作用,向上对接应用层的窗口请求,向下与 SurfaceFlinger 等底层组件交互,确保窗口能够正确地在屏幕上显示和管理。

大模型大数据攻城狮的专栏 1795
上一篇: RESTful API 设计指南
下一篇: SOAP webserivce 和 RESTful webservice 对比及区别
bamboolsu
博客等级 码龄22年 200粉丝 394原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值