首頁  >  文章  >  Java  >  最好的8個Java RESTful框架

最好的8個Java RESTful框架

高洛峰
高洛峰原創
2017-01-05 12:26:58975瀏覽

過去的每一year,湧現出越來越多的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

Jetty for HTTP, Jersey for REST, 以及Jackson for JSON

Jetty for HTTP, Jersey for REST, 以及Jackson for JSON

Jetty for HTTP, Jersey for REST, 以及Jackson for JSON

Jetty for HTTP, Jersey for REST, 以及Jackson for JSON

Jetty for HTTP, Jersey for REST, 以及Jackson for JSON


Jetty for HTTP, Jersey for REST, 以及Jackson for JSON

Jetty for HTTP, Jersey for REST, 以及Jackson for JSON

也支援其它的函式庫,Mustache, Logback, JDBI, Hibernate Validator, Guava, … 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 3399)規格。它擴展了JAX-RS 實現, 提供了更多的特性和工具, 可以進一步地簡化 RESTful service 和 client 開發。儘管相對新怡,它已經是一個產品等級的 RESTful service 和 client 框架。

連結

官方網站 GITHUB 文件

優點

優秀的文件和範例

快速

超級容易的路由

優良的範例比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,Logava, JSON —🎜模組化的.)🎜🎜很好的資料持久化和快取🎜🎜不喜歡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

缺点

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

太young

目前还不支持异步Async

例子

@GET ( "/message/{id}" )
   public Message sayHello(String id, // path param
               String who // query param
               ) {
     return new Message().setMessage(String.format(
         "hello %s, it&#39;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" );
  }
}

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

更多最好的8个Java RESTful框架相关文章请关注PHP中文网!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn