JAX-RSとSpring Restの違い


138

JAX-RS(まあ、おそらくJAX-RSは仕様なので、ジャージーを使用して比較する必要がある)とSpring for Restful servicesの違いと混同しました。オンラインでより多くの情報を検索しようとすると、さらに混乱します。私の会社はSpring MVCを使用してRestful APIを開発しています

混乱する部分は、JAX-RSはRESTful WebサービスのJava APIを表し、Spring ではJavaを使用してRESTful Webサービスを開発しているため、実際には違いがわかりません。SpringはJAX-RS仕様に準拠していますか?

私が知っていることから今まで:

  1. JAX-RSは設計図/仕様であり、実装としてJersey、RESTeasyなどがあります。

@CássioMazzochiMolinあなたの答えに感謝します、しばらくしてそれを受け入れます、もう1つの質問、あなたは、Spring FrameworkがJAX-RS実装ではなく、どの仕様がSpringに従っているかを述べましたか?ありがとう
hades

3
特定の仕様は実装していません。それは、物事を行うための春の方法です。REST機能はspring-webmvc、Springのmodel-view-controllerも提供するモジュールによって提供されます。
cassiomolin 2017年

回答:


150

JAX-RS

JAX-RSは、JavaでREST Webサービスを実装するための仕様であり、現在JSR-370で定義されています。これは、現在JSR 366で定義されているJava EEテクノロジーの一部です。

Jersey(GlassFishおよびPayaraに同梱)はJAX-RSリファレンス実装ですが、RESTEasy(JBoss EAPおよびWildFlyに同梱)およびApache CXFなどの他の実装もあります。同梱(TomEEおよびWebSphereに同梱。

Spring Framework

春のフレームワークはある完全なフレームワークを使用すると、Javaエンタープライズ・アプリケーションを作成することができます。REST機能は、Spring MVCモジュール(モデルビューコントローラー機能を提供する同じモジュール)によって提供されます。これはJAX-RS実装ではなく、JAX-RS標準のSpring代替と見なすことができます。

Springエコシステムは、永続性、セキュリティ、ソーシャルネットワークとの統合、バッチ処理など、エンタープライズアプリケーションを作成するための幅広いプロジェクトも提供します。

JAX-RS APIを使用する次のリソースコントローラーを検討してください。

@Path("/greetings")
public class JaxRsController {

    @GET
    @Path("/{name}")
    @Produces(MediaType.TEXT_PLAIN)
    public Response greeting(@PathParam("name") String name) {

        String greeting = "Hello " + name;
        return Response.ok(greeting).build();
    }
}

Spring MVC APIを使用した同等の実装は次のようになります。

@RestController
@RequestMapping("/greetings")
public class SpringRestController {

    @RequestMapping(method = RequestMethod.GET,
                    value = "/{name}", 
                    produces = MediaType.TEXT_PLAIN_VALUE)
    public ResponseEntity<?> greeting(@PathVariable String name) {

        String greeting = "Hello " + name;
        return new ResponseEntity<>(greeting, HttpStatus.OK);
    }
}

Spring BootとJerseyの使用

Spring Bootは、spring-boot-starter-jerseySpring MVCの代わりにRESTエンドポイントのJAX-RSプログラミングモデルを使用できるモジュールを提供します。Jersey 2.xで非常にうまく機能します。

Jersey 2.xおよびSpring Boot 1.4.xでWebアプリケーションを作成する完全な例については、この回答を参照してください。


したがって、Spring MVCを使用してGlassFish / Payaraにデプロイする場合、サーバーのjax-rs実装を無効にする必要がありますか?
Pradeep_Evol

この記事は、Spring 4のdzone.com/articles/…に当てはまりますか?その春のウェブは、単に春+ジャージー(JAX-RS)よりもresT Webサービスを作成する方が良いですか?
tgkprog

58

注釈の違い

(2018年現在)Spring MVCのソリューションはJAX-RSよりも古いため、Spring MVCはJAX-RSアノテーションに標準化されていません。同等のものは次のとおりです。

ここに画像の説明を入力してください

https://stormpath.com/blog/jax-rs-vs-spring-rest-endpoints

標準化されていないAPIを使用している場合は、それらが非推奨になり、数年以内に新しい実験的なAPIに取って代わられることを期待してください。下位互換性(たとえば、新しいJDKバージョンがリリースされたとき)に対する説明責任はかなり少なくなります。


多くのおかげで、これは素晴らしいです
Bejond

26

ジャージーレスト、スプリングレスト、スプリング付きジャージーレストの両方を使用しました。どちらも、優れた実装を備えた非常にリッチなフレームワークです。ORM、Springセキュリティ、DIなどの他のSpringサービスを使用している場合は、Spring Restを使用することをお勧めします。どちらもSpringライブラリなので、コードと依存関係の管理は少し簡単だと思います

JAX-RSプロ:

  • JSR標準はサーブレットコンテナなしで実行できます(グリズリー、シンプル、...)
  • RESTアプリケーション専用に設計された本番環境対応の実装(jersey、cxf、resteasy、restletなど)

Spring MVCプロ:

  • REST機能だけでなく、「完全な」スタックを提供する

  • 依存性注入/ AOP /トランザクション

  • プラグ可能なビューテンプレート(JSP、フリーマーカー、速度など)

次のリンクで詳細を確認できます

  1. https://www.infoq.com/articles/springmvc_jsx-rs
  2. JAX-RS / Jerseyを使用する理由

4
ただし、JAX-RSはSpring(DI、AOPなど)でも使用できます。
デーモン

5

JAX-RSが仕様で、jerseyなどがその実装です。人々は、Springを使用してRestFul Webサービスを作成します。これは、SpringとRESTfulな実装により、休止状態の統合などの機能が提供され、IOCやアスペクト指向プログラミングなどの機能も提供されるためです。

実装にジャージを使用しているかのように、問題はORMテクノロジーを使用してバックエンドからデータをフェッチする必要があり、そのためのボイラープレートコードを作成する必要がある場合です。

これが、Restの実装とともにSpring機能も提供するため、人々や企業でさえSpringを使用する理由です。そして今、最新のSpring Boot実装を使用して、多くの設定なしで非常に速く開発を始めることができます。

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