web-dev-qa-db-ja.com

サーブレットvs REST

サーバー側で5つのメソッドを作成する必要があります。これらのメソッドはバイナリデータで動作します。リモートクライアントは、アプレットとJavaScriptです。クライアントはファイルをサーバーに送信します。サーバーはこれらのファイルを解析し、応答をXML/JSONとして返す必要があります。

だから私は混乱しています-この場合、RESTサービスを使用するのは良い習慣ですか?または、サーブレットを使用する必要がありますか?

私の同僚は私に言った:

「1つのアプリケーションでのみ使用されるRESTサービスの作成は適切ではありません。RESTは、多くのアプリで使用される場合にのみ作成する必要があります。RESTは、サーブレット:RESTはサーブレットよりも低速です。サーブレットよりもスレッドセーフなRESTを記述するのは困難です」

ただし、サーブレットの使用にはいくつかの欠点があります。呼び出す関数名を送信する必要があります(つまり、追加のHTTPパラメーター送信関数名として)。次に、doPostメソッド内で次のスイッチを実行します。

switch(functionName) {
 case "function1":
   function1(); 
   break;
 case "function2"
   function2(); 
   break;
//.... more `case` statements....

}

RESTの場合、機能ごとに異なるURLを簡単に使用できます。また、RESTの場合、サーバーからJSON/XMLを返す方が便利です。

26
MyTitle

残りを1つのアプリケーションだけで使用するのは良くないという同僚の意見には同意しません。将来、同じREST APIを使用して異なるアプリケーションを使用することを決定する可能性があるためです。もし私があなただったら、私は純粋なRESTを選ぶでしょう。どうして?

  1. 残りの実装にフレームワークを使用している場合(たとえば、 Apache cxf または jersey )、すぐに使えるものがたくさんあります。たとえば、JSONオブジェクトをそのまま使用して、シリアル化と逆シリアル化を取得します(最終的にはJsonProviderを実装する必要がありますが、これは大したことではありません)。

  2. 動作するのは直感的です(残りのAPIを適切に設計する場合)。

  3. JavaScriptクライアントが非常に簡単に消費できる(特に、JQueryなどを使用している場合)

ただし、何を正確に実行したいかによって大きく異なります。強力なトランザクションロジックを使用している場合、残りは非常に難しい場合があります。 POSTリクエスト(他のHTTPメソッドを使用しない)のみ)を実行する場合は、追加のフレームワークを操作したり依存関係を増やしたりする必要がないため、サーブレットを使用できます。 RESTはアーキテクチャ上の概念であり、サーブレットテクノロジと矛盾しないことに注意してください。私は助けました。

25
Cyril Gavrailov

ここでは、2つのパラダイムを混乱させています。

  • RESTはソフトウェアアーキテクチャの「スタイル」です。
  • サーブレットはサーバー側のテクノロジーです。

たとえば、サーブレットを使用してRESTのようなサービスを実装できます。

まず、2つの異なるパラダイムの観点から話します。それはちょっとリンゴとオレンジです。

RESTは、HTTP操作(GET、PUTなど)を使用してリソースの状態を読み書きするサービスのスタイルです。リソースを「名詞」と「物」と考えてください。

一方、サーブレットは、HTTP要求をカスタムJavaコードに接続するためにSun Microsystemsによって最初に提供されたソフトウェア仕様です。 。

あなたの質問は、入力->出力メソッドを扱うことを探していることを暗示しているので、単純なサーブレットだけが仕事をするべきです。

4
mopolopo

Jerseyの使用に関する問題は見られず、RESTサービスを作成します。RESTタリバンであることは知っていますが、JAX-RSを使用してこの種のアーキテクチャを実装するのは本当に簡単です。 .. 何故なの?

あなたの同僚は、「RESTは多くのアプリで使用される場合にのみ作成する必要があります」と言いますが、これがどのように成り立つのかわかりません。なぜ、1つのアプリに対してREST

3
Enrichman

同僚が時期尚早な最適化を適用しているように聞こえます。 JAX-RSライブラリを使用して迅速に記述できる場合は、それを実行してください。それがボトルネックであることが判明した場合は、サーブレットとして書き換えるのに時間がかかります。

私の経験では、JAX-RSのパフォーマンスオーバーヘッドは、サーブレットで直接同等のものを記述する開発と保守のオーバーヘッドを正当化するのに十分な大きさではありません問題がJAX-RSにうまくマッピングされる場合

2

コンテナのバージョンに応じて、Jersey(または他のJAX-RS実装)は、適切なハンドラーにリクエストをディスパッチするためにサーブレットを使用します。

アプリケーションが本当にRESTfulである場合、JAX-RSは必要なことを行います。それ以外の場合は、FrontControllerを使用してリクエストを解釈し、適切なハンドラーに転送することを検討してください。

また、XMLまたはJSONとRESTを混同しないでください。ほとんどの(すべてではないにしても)JAX-RS実装でこれらを無料で取得できますが、これらの実装はまだコンテンツマーシャリングを他のライブラリ(JAXBなど)に委任します。

1
David Grant

同様のリンクを次に示します。彼は単純なサーブレットでそれをやった http://software.danielwatrous.com/restful-Java-servlet/

1
hello