web-dev-qa-db-ja.com

JAX-RSとスプリングレストの違い

JAX-RS(JAX-RSは単なる仕様なので、Jerseyを使って比較するべきです)とSpring for Restful servicesの違いを混同しました。私はオンラインでより多くの情報を検索しようとしました、そしてそれはより混乱します。私の会社はRestful APIを開発するためにSpring MVCを使っています

混乱している部分は、JAX-RSはRESTful Webサービス用のJava APIの略です。私はRESTful Webサービスの開発にもJavaを使用しています。 SpringはJAX-RS仕様に準拠していますか?

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

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

JAX-RS

JAX-RSは---REST WebサービスをJavaで実装するための 仕様 で、現在は JSR-37 で定義されています。現在は JSR 366 で定義されている Java EE technologies の一部です。

Jersey (GlassFishおよびPayaraに同梱)はJAX-RS参照実装ですが、 RESTEasy (JBoss EAPおよびWildFlyに同梱)などの他の実装もあります Apache CXF (TomEEとWebSphereに同梱).

春のフレームワーク

Spring Frameworkフルフレームワーク で、これによりJavaエンタープライズアプリケーションを作成できます。 REST機能は Spring MVC モジュール(model-view-controllerを提供するモジュールと同じです能力)。これは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-jersey モジュールを提供します。これを使うと、Spring MVCの代わりにRESTエンドポイントにJAX-RSプログラミングモデルを使用できます。それはJersey 2.xと非常にうまくいきます。

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

104
cassiomolin

注釈の違い

(2018年現在)Spring MVCは、そのソリューションがJAX-RSより前のものであるため、JAX-RSアノテーションに標準化されていません。同等物はここにある:

enter image description here

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

標準化されていないAPIを使用している場合、それらは推奨されなくなり、数年以内に新しい実験用APIに置き換えられる可能性があります。下位互換性への説明責任が少なくなります(たとえば、新しいJDKバージョンがリリースされたときなど)。

27

私はJersey Rest(スプリングレスト)とJersey Rest(スプリング付き)の両方で仕事をしました。どちらもNice実装の非常に豊富なフレームワークです。 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を使うのですか?
16

JAX-RSが仕様で、ジャージなどがその実装です。 SpringはRestFul Webサービスを作成するためにSpringを使用しています。なぜなら、Springは休止中の統合やIOC、Aspect指向プログラミングなどの機能も提供するからです。

実装にjerseyを使用しているかのように、問題はいくつかのORMテクノロジを使用してデータをバックエンドから取得する必要があり、そのための定型コードを記述する必要がある場合です。

だからこそ、人々や企業でさえも、Springの機能を提供するRest実装と共にSpringを使っているのです。そして今、最新のSpringブート実装を使うことで、たくさんの設定なしで非常に速く開発を始めることができます。

4
Rahul Singh