ホームページ  >  記事  >  Java  >  8 Java RESTful フレームワーク

8 Java RESTful フレームワーク

高洛峰
高洛峰オリジナル
2017-01-17 11:08:591284ブラウズ

年が経つごとに、ますます多くの Java フレームワークが登場します。 JavaScript と同じように、誰もが優れたフレームワークがどのように機能するかを知っていると思っています。私の祖母でさえ、今では私が聞いたこともないし、おそらく決して使うこともないフレームワークを使用しています。冗談はさておき、市場はほぼ何でもできる肥大化したフレームワークで飽和していますが、この記事では、最高の Java RESTful フレームワークを提供することを目的としています。私は軽量の製品のみを紹介し、肥大化し過剰に設計されたフレームワークはスキップします。同時に、私はそれらが安定して成熟し、シンプルで軽量な機能を提供することを望んでいます。理由は後述しますが、私がこのルールを破るのは、Play フレームワークを導入する場合のみです。将来のプロジェクトにどの Java RESTful フレームワークを使用するかは、現在のニーズに完全に依存します。選択しやすくするために、最も顕著なフレームワークの機能をリストします。これにより時間を節約できると思います。

Dropwizard

生年月日: 2011
評価: 4.5/5

Dropwizard は、安定した成熟した Java ライブラリを提供し、シンプルな軽量パッケージにパッケージ化されています。
Dropwizard はフレームワークとライブラリの間のどこかにあります。 Web アプリケーションの開発に必要なすべてが提供されます。組み込みのモジュール性のおかげで、アプリケーションは小さく無駄のない状態を保つことができ、開発とメンテナンスの時間と負担が軽減されます。
Dropwizard は既存の Jetty HTTP ライブラリを使用し、外部サーバーを必要とせずにプロジェクトに埋め込まれます。すべての Dropwizard プロジェクトには、組み込み HTTP サーバーを管理するためのメイン メソッドがあります。

リンク
公式サイト GITHUB ドキュメント

利点

プロジェクトのビルドと起動が速い

モジュール性

信じられないほど速い (少なくとも組み込みのサーバーによると)メトリクス測定結果)

HTTP の Jetty、REST の Jersey、JSON の Jackson

Mustache、Logback、JDBI、Hibernate Validator、Guava などの他のライブラリもサポートしています…

モニタリングをサポートするためにメトリクスを使用します

メインこのメソッドは Jetty サーバーを起動します。これは簡単にデバッグと保守が可能です。

強力なコミュニティ

欠点

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 コンポーネントを使用します。
残念ながら、これには独自の問題も伴います。 これらのライブラリを組み合わせると、予期しない問題が発生する可能性があります。これが、満点の 5 つ星を与えるのではなく、0.5 つ星を差し引いた理由です。

ジャージ

生年月日: 2012 (ジャージ 2. JAX-RS 実装を拡張し、RESTful サービスとクライアント開発をさらに簡素化するための機能とツールをさらに提供します。比較的新しいものですが、すでに運用グレードの RESTful サービスおよびクライアント フレームワークです。

リンク

公式サイト GITHUBドキュメント

長所

優れたドキュメントと例

高速

ルーティングが非常に簡単

スムーズなJUnit統合

個人的には、RESTfulサービスを開発する場合、JAX-RSの実装はMVCフレームワークよりも優れています。

他のライブラリ/フレームワーク (Grizzly、Netty) に統合可能 これが、多くの製品で使用される理由かもしれません。

非同期接続をサポート

Jersey を使用する場合、サーブレット コンテナーは必要ありません。

WADL、XML/JSON サポート

Glassfish に含まれています

欠点

Jersey 2.0 以降では、やや複雑な依存関係注入実装が使用されています

おそらく悪いことではありません。 Jersey 1.X は古い JAX-RS 実装を使用します

多くのサードパーティ ライブラリは Jersey 1.X のみをサポートしており、Jersey 2 では利用できません。選択肢、5 つ星。

Ninja Web Framework

誕生日: 2012

評価: 3.5/5

Ninja Web Framework はフルスタック Java Web フレームワークです。安定、高速、信頼性の高い実稼働グレード。

RESTful Web アプリケーション (サーブレット、Guice、JPA、Flyway 移行、Maven など) の開発、テスト、公開、保守のためのすべてを提供します。
DropWizzard、Ninja Web Framework と同様統合されたソフトウェア スタックです。独自のプロジェクトを構築する必要はなく、Maven アーキタイプを使用して新しいプロジェクトを生成し、IDE にインポートしてコーディングを開始するだけです。

リンク

公式サイト GITHUBドキュメント


利点

速い

プロジェクトの構築と起動が速い

モジュール性

XML、HTML、JSONレンダリング

他のライブラリ(Guice、Logback、Guavaなど)もサポートしています。 )

優れたデータ永続性とキャッシュ

サーブレットコンテナが気に入らない場合は、好きなコンテナを選択できます

コンテナがまったく好きではない場合は、スタンドアロンモードを使用して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 までご連絡ください。