過去に毎年、ますます多くのJavaフレームワークが登場しました。 JavaScriptのように、誰もが優れたフレームワークの機能がどのようなものであるべきかを知っていると考えています。私の昔の祖母でさえ、私が聞いたことのないフレームワークを使用しています。肥大化したフレームワーク市場は、ほとんど何でもできる肥大化したフレームワークによって飽和していますが、それを判断する方法は?この記事は、現在利用可能な最高のJava Restfulフレームワークを提供することを目的としています。私は軽量製品のみを紹介し、それらの肥大化した過剰に設計されたフレームワークをスキップします。同時に、私はそれらを安定して成熟させて、シンプルで軽量な機能を提供したいだけです。プレイフレームワークを導入するときにこのルールを破っただけで、その理由は後で与えられます。将来のプロジェクトで使用するJava Restfulフレームワークは、現在のニーズに完全に依存しています。あなたの選択を簡単にするために、私は最も顕著なフレームワーク機能をリストします。これにより時間を節約することを願っています。
Dropwizard
出生時間:2011
評価:4.5/5
DropWizardは、安定した成熟したJavaライブラリを提供し、それをシンプルで軽量のパッケージにカプセル化します。
Dropwizardはフレームワークとライブラリの間のどこかにあります。 Webアプリケーションを開発するために必要なすべてのニーズを提供します。組み込みのモジュール性のおかげで、アプリケーションは小さくて無駄のないままであり、開発時間とメンテナンス時間を短縮し、負担を軽減できます。
DropWizardは、既存のJetty HTTPライブラリを使用して、外部サーバーを必要とせずにプロジェクトに埋め込みます。すべてのDropWizardプロジェクトには、組み込みのHTTPサーバーを管理する主な方法があります。
リンク<br />公式サイトGithubドキュメント
アドバンテージ
迅速なプロジェクトの構築とスタートアップ
モジュラー
信じられないほどの高速(少なくとも組み込みのメトリックで測定された結果に基づいて)
HTTPのJetty、Jersey for Rest、Jackson for Json
また、口ひげ、logback、jdbi、hibernate valibator、guavaなど、他のライブラリもサポートしています。
メトリックによる監視をサポートします
メインメソッドはJetty Serverを起動し、簡単にデバッグして維持できます
強いコミュニティの強さ
欠点
DropWizardのドキュメントは主な知識源ですが、それは優れていません。サードパーティライブラリのドキュメントを検索して検索する必要がある場合があります。
何らかの理由でエラーはプレーンテキストとして扱われます。応答結果が常にJSONであることを望む場合、これは問題があるかもしれません
必ず最新のDropWizardを使用してください。一部の古いバージョンでは、放棄されたサードパーティライブラリを使用してください。そして、早期ドロップウィザードをアップグレードすることは困難でした
例
パッケージcom.example.helloworld; 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;パブリッククラスHelloWorldApplicationは、アプリケーション<HelloWorldConfiguration> {public static void main(string [] args)throws exception {new HelloWorldApplication()。run(args); } @Override public String getName(){return "helloword"; } @Override public void initialize(bootstrap <helloworldconfiguration> bootstrap){//まだ何もすることはありません} @Override public void run(helloworldconfiguration構成、環境環境){//まだやることはありません}}}注<br />個人的には、このフレームワークを大規模なプロジェクトに推奨したくありません。しかし、あなたがそれを試してみたいなら、あなたは失望することはありません。主に、このフレームワークは、最高のモダンなJava Webコンポーネントを使用し、シンプルで使いやすいフレームワークに組み立てられます。
残念ながら、これも問題をもたらします。これらのライブラリを組み合わせると、予期せぬ問題につながる可能性があります。これが、5つ星のフルスコアとして評価することなく、0.5つ星を失った理由です。
ジャージー
出生時間:2012(ジャージー2.x)
評価:5/5
Jersey Restfulフレームワークは、JAX-RS(JSR 311&JSR 339)の仕様を実装するオープンソースのRestfulフレームワークです。 JAX-RSの実装を拡張し、Restfulサービスとクライアント開発をさらに簡素化できる機能とツールを提供します。 Xinyiに比較的新しいものであるにもかかわらず、それはすでに製品グレードのRestfulサービスとクライアントフレームワークです。
リンク<br />公式サイトGithubドキュメント
アドバンテージ
優れたドキュメントと例
速い
非常に簡単なルーティング
スムーズなジュニット統合
個人的には、Restful Serviceを開発する場合、JAX-RS実装はMVCフレームワークよりも優れています。
他のライブラリ/フレームワーク(Grizzly、Netty)に統合できます。これが、多くの製品がそれを使用する理由かもしれません。
非同期リンクをサポートします
サーブレットコンテナが好きではありませんか?ジャージーを使用するときに使用できます。
WADL、XML/JSONサポート
グラスフィッシュに含まれています
欠点
Jersey 2.0+は、複雑な依存関係インジェクションの実装を使用しています
おそらく悪いことではありません。 Jersey 1.xは、古いJax-Rsを使用して実装しています
多数のサードパーティライブラリはジャージー1.xのみをサポートしており、ジャージー2.xでは利用できません
例
パッケージorg.glassfish.jersey.examples.helloworld; javax.ws.rs.getをインポート; javax.ws.rs.pathのインポート;インポート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; }}注釈
ジャージーは私の選択です、5つ星。
忍者Webフレームワーク
出生時間:2012
評価:3.5/5
Ninja Webフレームワークは、フルスタックのJava Webフレームワークです。安定した、高速で、信頼できる、製品グレード。
Restful Webアプリケーション(サーブレット、GUICE、JPA、フライウェイの移行、Mavenなど)を開発、テスト、公開、および維持するすべてのものを提供します。
Dropwizzardと同様に、Ninja Webフレームワークは統合されたソフトウェアスタックです。独自に構築する必要はありません。MavenArchetypeを使用して新しいプロジェクトを生成し、IDEにインポートしてコーディングを開始してください。
リンク<br />公式サイトGithubドキュメント
アドバンテージ
素早い
迅速なプロジェクトの構築とスタートアップ
モジュラー
XML、HTML、JSONレンダリング
他のライブラリもサポートされています(Guice、Logback、Guavaなど)
優れたデータの持続性とキャッシュ
サーブレットコンテナが好きではありませんか?あなたはあなたが好きなコンテナを選ぶことができます
コンテナがまったく気に入らない場合は、スタンドアロンモードを使用して、Jettyを自己実行ジャーとして使用できます
欠点
同様に、Dropwizzardのように、ドキュメントには十分ではありませんが、十分ではありません。それを知るのに長い時間がかかりました。このフレームワークは、他の多くのライブラリにも依存しており、必要な情報を取得するのが面倒です。
あまり有名ではなく、小さなコミュニティ。このフレームワークは、Scalaに切り替えたPlay 2.xユーザーによって作成されたという噂があります
例
パッケージコントローラー。 Public Class ApplicationController {public result index(){person person = new Person(); person.name = "John Johnson"; return results.json()。render(person); }}注<br />見栄えがよくありますが、成熟する前に脇に捨てます。
フレームワークを再生します
出生時間:2011
評価:4/5
Play Frameworkを使用して、Java&Scalaサポートを使用してWebアプリケーションを作成、構築、公開します。軽量のステートレスアーキテクチャに基づいて、Akkaを使用しています。 CPUの低いアプリケーションと大規模なメモリ消費に使用する必要があります。
リンク<br />公式サイトGithubドキュメント
アドバンテージ
開発が簡単です
高速ですが、他のフレームワークほど高速ではありません
Nettyに基づいて、非ブロッキングI/Oをサポートします。リモートコールを並行して処理するときは優れています。
コミュニティは大きいです
迅速なプロジェクトの構築とスタートアップ
モジュラー
MVC
REST、JSON/XML、Web Sockets、非ブロッキングI/O
ブラウザを更新して、最新の変更を確認してください
サポートasync
出版された本があります
欠点
バージョン2.0は、最も物議を醸すJavaフレームワークです。 Scalaに切り替えて、Java開発者を外出しました。
後方互換性はありません。 2.xの書き直しを再生します
軽量として知られていますが、少し肥大化しています
SBTビルドツール。 The Maven Killerとして知られていますが、それを交換するために決して優れていません。学習して構成が難しい
非サービス
リリース間の変化を破る
例
パッケージコントローラーのインポートplay.api.api._import play.api.mvc._クラスアプリケーション拡張コントローラー{def hello(name:string)= action {ok( "hello" + name + "!")}}}注<br />どれだけ不平を言っても、私はまだこのフレームワークを最初に選択し、選択します。残念ながら、私はそれを4つ星しか与えることができません。 JAX-RSに基づくフレームワークは、Restful Webサービスにより適していると固く信じています。
RestExpress
出生時間:2009年
評価:3/5
RestExpressは、Java Restfulサービスを簡単に作成できるようにするための非コンテナーの軽量のNetty HTTPスタックラッパーです。
RestExpressの目標は、最高の安らかなプラクティスをサポートすることです。
リンク
github
アドバンテージ
本物のマイクロフルームワーク
高速で信頼性の高いパフォーマンス
XML/JSON
最も古く、最も安定した安らかなフレームワークの1つ
欠点
ドキュメントはありません
サポートはほとんどありません
非常に小さなコミュニティ
例
パッケージcom.example; java.io.ioexceptionをインポートします。 io.netty.handler.codec.http.httpmethod; import org.restexpress.restexpress; public class main {public static RestExpress startServer(string [] args)throws ioexception {reptexpress 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);サーバーを返します。 } public static void main(string [] args)throws exception {repexpress server = startServer(args); system.out.println( "Enterをヒットして停止..."); system.in.read(); server.shutdown(); }}注<br />このフレームワークは非常に高速ですが、私もお勧めしません。ドキュメントの欠如とサポートの欠如により、それは未開発のフレームワークになります。スピードのために3つ星を与えます。
レストレット
出生時間:2005年
評価:4.5/5
RESTLETは、JavaプログラマーがRestful Architecture Patternsに準拠する大規模で高速のWeb APIを構築するのに役立ちます。
強力なルーティングおよびフィルタリングシステムを提供します。統一されたクライアント/サーバーJava APIは、すべての主要なプラットフォーム(Java SE/EE、Google Appengine、OSGI、GWT、Android)を満たし、プログラマーのニーズを満たすために無数の拡張機能を提供します。
私が知る限り、それは最初のJava Restful Webフレームワークです。多くの企業はそれを使用していますが、あたかもそれが見えないかのように、あなたはそれを聞いたことがないかもしれません。
リンク<br />公式サイトGithubドキュメント
アドバンテージ
強力
エンタープライズレベルのフレームワーク
マルチプラットフォームJava SE、Java EE、Google Web Toolkit、Google Appengine、Android、OSGI環境
Jax-RSをサポートする(ジャージのように)
最も高度な安らかなサポート
モジュラー
他のライブラリをサポートします
開発はアクティブです
スマートURLバインディング、フル機能のURIルーティング
関連する本があります
欠点
非常に急な学習曲線
Stackoverflowでも開いている閉鎖コミュニティ
もはや人気がなく、プレイフレームワークとジャージーのおかげで
例
public class part03拡張serverResource {public static void main(string [] args)スロー例外{// httpサーバーを作成し、ポート8182 new Server(protocol.http、8182、part03。class).start(); } @get( "txt")public string toString(){return "hello、world"; }}注<br />このフレームワークは常に人気がありますが、5つ星と現在の完了に5つ星を与えることはできません。
RESTX
出生時間:2013
評価:3.5/5
RESTXは、軽量、モジュール式、マルチ機能、超高速オープンソースJava RESTフレームワークです。
リンク<br />公式サイトGithubドキュメント
アドバンテージ
速く、軽量
構築しやすい
本物のマイクロフルームワーク
モジュラー
他のライブラリをサポートします
Mongodbをサポートします
欠点
友好的に混乱するドキュメント。このタイプのフレームワークのより良いドキュメントを期待しています
若すぎる
非同期の非同期はまだサポートされていません
例
@get( "/message/{id}")public message sayshello(string id、// path param string who // query param){return new message()。setmessage( "hello%s、its%s"、who、datetime.now()。 } @post( "/message/{id}")public message sayshello(string id、// path param message msg // body param){return msg.setmessage( "%s @%s"、msg.getmessage()、datetime.now()。 }<br />正直に言うと、私はこのフレームワークにあまり時間を費やしませんでした。別のフレームワークにあまり努力する価値はありません。つまり、Java Framework市場はますます断片化されており、JavaScript市場のように、この傾向は停止する必要があります。
スパークフレームワーク
出生時間:2011
評価:3.5/5
ApacheのビッグデータフレームワークSparkと混同しないでください。ここのSpark Frameworkは、急速な発展のための軽量のJava Webフレームワークです(Sparkユーザーの50%がSparkを使用してREST APIを作成します)。 Ruby Framework Sinatraに触発されています。
最小化されたカーネルが1m未満で、すべての基本機能を提供して、Restfulまたは従来のWebアプリケーションを構築します。
リンク<br />公式サイトGithubドキュメント
アドバンテージ
速く、軽量
優れた迅速なプロトタイプ
構築しやすい
多くの場合、Angularjsで使用されます
本物のマイクロフルームワーク
Jettyを使用します
コンテナで使用するか、独立して実行できます
欠点
ドキュメントはより良い場合があり、初心者には適していません
大規模なプロジェクトには適していません
コミュニティスモール
例
Static Spark.sparkをインポート。*; public class helloworld {public static void main(string [] args){get( "/hello"、(req、res) - > "hello world"); }}注<BR />このフレームワークは、初期開発に適しています。主に小さなプロジェクトまたはプロトタイプとして使用されます。