Rest APIサーバー用のScalaフレームワーク?[閉まっている]


105

Rest APIサーバー(Symfony PHPではWebサービス内にあります)をScalaに移動することを考えています:速度、オーバーヘッドがない、CPUが少ない、コードが少ない、スケーラビリティーなど。いくつかまでScalaを知りませんでした数日前ですが、Scalaブックとすべてのブログ投稿および質問で、最近学んでいることを楽しんでいます(それほど醜くはありません!)

次のオプションがあります。

  • Rest APIサーバーを一から構築する
  • Scalatraのような小さなScala Webフレームワークを使用する
  • リフトを使用する

HTTPリクエスト、JSON出力、MySQL(データ)、OAuth、Memcache(キャッシュ)、ログ、ファイルのアップロード、統計(おそらくRedis)。

あなたは何をお勧めします?

回答:


87

順不同:


1
ありがとう!非常に軽量でスケーラブルであるように思わように私は、アッカにチェックします
fesja

1
注意:restfulie.caelum.com.brをScala に統合または移植することを誰かが回避できることを願っています。現在の1つのオプションは、JRuby上のScalaのフロントエンドとしてRestfulieを使用することです。
oluies

3
+1、私は仕事でAkkaを使用して高性能APIサーバーを強化しています。AkkaでJAX-RSを使用する場合の欠点は、JAX-RSには、純粋なScalaプロジェクトに完全には適合しない大量のJavaの特異性がロードされていることです。それでも、Akkaは取引全体に価値があります。
マックスA.

2
アッカは良い選択です。JSONを提供している場合は、Lift JSONをご覧ください。問題なく組み合わせることができます。
andyczerwonka

1
@santiagobasultあのプレイだよ!2.0とPlay-mini!2.0が起こりました
12

22

Unfilteredをお勧めします。それは「Scalaの方法」で物事を実行する慣用的なWebフレームワークであり、非常に美しいものです。


15

見てくださいXitrumを(私はその作者だ)、それはあなたが記載されているすべてを提供します。そのドキュメントは非常に広範囲です。READMEから:

Xitrumは、NettyとHazelcastの上にある非同期のクラスター化されたScala WebフレームワークとWebサーバーです。

  • アノテーションは、JAX-RSの精神に則って、URLルートに使用されます。すべてのルートを1か所で宣言する必要はありません。
  • 非同期、Nettyの精神。
  • セッションはCookieまたはクラスター化されたHazelcastに保存できます。
  • インプロセスおよびクラスター化されたキャッシュでは、個別のキャッシュサーバーは必要ありません。
  • インプロセスおよびクラスター化されたCometの場合、別個のCometサーバーは必要ありません。

7

さらに2つのオプションを追加します。組み込みJAX-RSサポート付きのakkaと、単純にJAX-RSを直接使用する(おそらくJersey実装)。間違いなく他のものよりも「Scala-y」は少ないですが(パラメーターとパスをバインドするための注釈に依存)、JAX-RSは使用する喜びであり、最小限のフットプリントでWebサービスコーディングの問題をすべてきれいに解決します。私はそれをakka経由で使用したことはありませんが、継続ベースの実装によって印象的なスケーラビリティーを実現し、そこで優れていることを期待します。


ありがとう!私はJAX-RSを@BrentとしてAKKAを確認します。非常に速く移動したい場合、APIにとって非常に重要な最小限のフットプリントで非常に軽量に見えます。
fesja

1
古いバージョンは厄介なthreadlocalに依存しているため(つまり、スレッドの一時停止と再開はサポートされていません)、スケーラビリティを得るにはJAX-RS 2.0(現在ベータ版)を使用する必要があります。
アダム・ゲント

4

Finagle HTTPサービスを構築するためのScalaコンビネーターライブラリであるFinchを見てください。Finchを使用すると、定義済みの基本ブロックの数から複雑なHTTPエンドポイントを構築できます。Finchエンドポイントは、パーサーコンビネーターと同様に、再利用、構成、テスト、および推論が簡単です。


3

これまでのところすべての良い答え。Liftが好む1つのポイントはRestHelperです。これにより、短くてエレガントなAPIメソッドを非常に簡単に作成できます。さらに、Liftに実装する他のすべてのことは非常に簡単です。そうは言っても、Memcacheは必要ないかもしれません。


ありがとう!memcacheが必要だと思いませんか?もちろん依存しますが、絶えず実行される可能性が非常に高いクエリがいくつかあるので、今度は勝ち、データベースへの負荷を減らします。
fesja

私は本当に昨日デビッドポラックが言ったことから離れています。基本的に、Lift内のキャッシュにより、memcacheの多くのユースケースが削除されます。これが彼のメッセージで、memcacheに関するスレッドに他のいくつかの投稿があります。groups.google.com
group

2

少し遅くなりますが、REST APIの作成にはボウラーフレームワークを使用することをお勧めします。それは小さく、要点と自動ケースクラス変換サポートです!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.