新しいプロジェクト用のJAX-RS実装の選択


35

RESTful APIを必要とする新しいJavaプロジェクトを開始しています。モバイルクライアントにサービスを提供するSaaSビジネスアプリケーションになります。

Java EE 6を使用して1つのプロジェクトを開発しましたが、ほとんどの経験がMicrosoftプラットフォームに関するものであるため、エコシステムについてあまり詳しくありません。

記載されているような新しいプロジェクトのJAX-RS実装の賢明な選択はどれでしょうか?

ウィキペディアのリストから判断すると、主な候補者はジャージー、Apache CXF、RESTeasy、Restletのようです。しかし、Wikipediaで引用されているJAX-RS実装の比較は 2008年のものです。

それぞれのホームページから私の最初の印象は次のとおりです。

  • CXFは非常に包括的なソリューションを目指しています(Microsoft分野のWCFを思い出させます)。これは、必要なものよりも理解、セットアップ、デバッグが複雑になると思います。
  • Jerseyはリファレンス実装であり、良い選択かもしれませんが、Sunの遺産であり、Oracleがそれをどのように扱っているのかわかりません(アナウンスページが機能せず、最後のコミット通知が4か月前のものです)。
  • RESTeasyはJBossからのもので、おそらく堅実なオプションですが、学習曲線についてはわかりません。
  • Restletは人気があるように見えますが、多くの歴史があります。JavaEE 6の世界でどの程度最新であるか、または(多くのXML構成のように)重いJ2EEの考え方を持っているかどうかはわかりません。

これらの各選択肢のメリットは何でしょうか?学習曲線はどうですか?機能サポート?ツール(例:NetBeansまたはEclipseウィザード)?デバッグと展開の容易さについてはどうですか?これらのプロジェクトのうち、他のものよりも最新のものはありますか?それらはどれくらい安定していますか?


1
タイトルの編集には感謝しますが、JAX-RSがモバイルプロジェクトに適しているかどうかは本当に質問していません。それは別の質問でしょう。どのJAX-RS実装が推奨されるかを見つけようとしています。
フェルナンドコレイア

回答:


22

全体的なソリューションとしてDropwizardが大好きになりました

Dropwizardは、巨大なアプリケーションコンテナーアプローチを採用するのではなく、開発サイクルを大幅に短縮する軽量ソリューションを提唱しています。基本的に、次の有名なフレームワークの接着剤を提供します。

  • 桟橋(HTTP)
  • ジャージー(JAX-RS)
  • ジャクソン(JSONまたはXML)
  • グアバ(JDKライブラリへの優れた追加)
  • メトリック(リアルタイムアプリケーション監視)
  • Hibernate Validator(入力検証)
  • OAuth(RESTful認証)

上記の組み合わせと機能テストへの堅実なアプローチを組み合わせることで、サービスを迅速に稼働させるための完全なソリューションが得られます。

うん?そして、私が尋ねたJAX-RSの質問...

JAX-RSのリファレンス実装であるJerseyが選択されたことがわかります。RESTEasyであるため、これは問題になると思いましたが、学習曲線はゼロでした。この2つはほぼ交換可能です。ただし、Jerseyクライアントはテストを構築するための流なインターフェイスを提供したと言えます。例は...

 @Override
  protected void setUpResources() {
    addResource(new HelloWorldResource("Hello, %s!","Stranger"));

    setUpAuthenticator();
  }

  @Test
  public void simpleResourceTest() throws Exception {

    Saying expectedSaying = new Saying(1,"Hello, Stranger!");

    Saying actualSaying = client()
      .resource("/hello-world")
      .get(Saying.class);

    assertEquals("GET hello-world returns a default",expectedSaying.getContent(),actualSaying.getContent());

}

2
Dropwizardに注目していただきありがとうございます。私はそれについて知らなかったし、私のニーズに非常によく合っているようだ。よく考えられており、実用的で現実的であり、Java EEプラットフォームの表面的な知識を与えるよりもはるかに優れたソリューションを構築するのに役立つ一方で、おそらく多くのトラブルを軽減できます。そして、企業市場にサービスを提供するYammerのような成功した会社から来ることは間違いなくプラスです。繰り返しますが、多くの感謝。
フェルナンドコレイア

1
問題ない。Dropwizardの機能の多くを実証する私のプロジェクトについてブログに書いています。それはあなたが必要として使用すること自由に感じMITライセンスの下です:gary-rowe.com/agilestack/2012/06/06/...
ゲイリー・ロウ

それが役立ちます。とても有難い。
フェルナンドコレイア

1
私はすでにJackson、Guava、Validator、OAuthを使用することに傾いていました。
フィロ

警告:Jersey 2.0は1.0よりもかなり悪いです。1.0に存在していた機能が欠落しているため、特定のDIフレームワークが強制され、コミュニティサポートは以前よりもはるかに悪化しています。
ギリ

6

あなたは見てとることができ、この質問他の開発者からいくつかの経験を説明し、。

私は個人的にジャージーをお勧めできます。それは非常に使いやすく、リファレンス実装であるため良いフォローがあります。これはまた、次の少しの間維持され、サポートされることを意味します。


1
有益な回答と、関連する質問へのリンクをお寄せいただきありがとうございます。奇妙なことに、検索に表示されませんでした。ただし、その答えは4年前のものなので、最新の推奨事項に感謝します。
フェルナンドコレイア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.