web-dev-qa-db-ja.com

サーブレットとRESTful

今日は安らかなサービスについて読みました。基本的に、Restful Webサービスは、通常のWebサービスがSOAP=リクエストで動作するのではなく、HTTPリクエストメソッドで動作します。

通常のサーブレットはHTTPメソッドでも機能するため、Restfulサービスの必要性は何ですか?

47
Dilip

RESTfulは、異なるテクノロジーというよりもアーキテクチャスタイルです。サーバーの観点では、完全にステートレスで、リクエストごとに自己完結するように設計されています(つまり、noセッションがあります)。クライアントの観点では、要求パラメーターではなく(自己文書化)パスパラメーターを使用したURLを介して、さまざまな形式で情報を取得する方法です。

プレーンなVanillaサーブレットを使用してこれを実行できますが、パスパラメーターを収集し、必要な応答を生成するためのボイラープレートコードがいくつか導入されます。 JAX-RSは便利で自己完結型のAPIであり、すべてのボイラープレートコードを自分で記述する必要がなく、最小限の自己文書化コードが作成されます。

以下のようにモデルとしてJAXBエンティティを持っていると仮定します。

@XmlRootElement
public class Data {

    @XmlElement
    private Long id;

    @XmlElement
    private String value;

    // ...

    @Override
    public String toString() {
        return String.format("Data[id=%d,value=%s]", id, value);
    }

}

そして、以下のJAX-RSリソース:

@Path("data")
public class DataResource {

    @EJB
    private DataService service;

    @GET 
    @Path("text/{id}")
    @Produces(MediaType.TEXT_PLAIN)
    public String getAsText(@PathParam("id") Long id) {
        return String.valueOf(service.find(id));
    }

    @GET 
    @Path("xml/{id}")
    @Produces(MediaType.APPLICATION_XML)
    public Data getAsXml(@PathParam("id") Long id) {
        return service.find(id);
    }

    @GET 
    @Path("json/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Data getAsJson(@PathParam("id") Long id) {
        return service.find(id);
    }

}

次に、適切な形式で目的のコンテンツを既に取得します:

それでおしまい。単一の単純なVanillaサーブレットで同じことを試してみてください:) SOAP本質的にalsoはHTTPを経由することに注意してください。基本的に、HTTPを介した追加のXMLレイヤーであり、別のネットワークプロトコルではありません。

こちらもご覧ください:

64
BalusC

私の意見では、より良い理解のために、私たちを混乱させるコンポーネントを分析する必要があり、これらのコンポーネントは、

  1. REST Concept

使用されるフィールド化REST HTTP 1.1およびUniform Resource Identifiers(URI)を設計するために

  1. [〜#〜] http [〜#〜]プロトコル- ハイパーテキスト転送プロトコル
  2. javax.servlet.http.HttpServletクラス
  3. JavaでのREST- JAX-RS およびその実装(Jerseyなど)
  4. その他REST JAX-RSに準拠しない実装(Spring REST) JAX-RSとSpring Restの違い

次に this answer を参照して、これらの実装がServletを使用する方法として理解する場合、具体的なjavax.servlet.http.HttpServlet)すべての着信要求をインターセプトします。重要な引用があります、

これらのRESTサービスクラスは、パス、消費、生成などのさまざまなプロパティについてジャージフレームワークに伝えるために注釈が付けられた単純なPOJOです。

その後、さらに読むことができます- RESTとHTTPプロトコルの違いは何ですか?HTTPとRESTの違いは何ですか? そして、WebサービスRESTFulを作成した場合に得られる利点、つまり(1つの回答からコピーした)として結論を​​出します。

[〜#〜] rest [〜#〜]は必ずしも[〜#〜] http [ 〜#〜]。 RESTful Webサービスは、RESTfulアーキテクチャに従う単なるWebサービスです。

What is Rest -
1- Client-server
2- Stateless
3- Cacheable
4- Layered system
5- Code on demand
6- Uniform interface

非REST HTTPの代わりにRESTを使用する利点は何ですか?

とはいえ、アドバンテージを取りたいとは思いません。デメリット(賛否両論)は非常に主観的であるため、議論します。

上記の測定値で、今あなたの質問のために、

通常のサーブレットはHTTPメソッドでも機能するため、Restfulサービスの必要性は何ですか?

RESTフレームワークはRESTサービスをエンタープライズレベルで単純化するが、HTTPサーブレットを使用して着信リクエストをインターセプトします。常にプレーンなサーブレットを使用できます。独自のRESTサービスを実装しますが、多くのボイラープレートコードを使用すると、より時間がかかります。

0
Sabir Khan