web-dev-qa-db-ja.com

RESTful WebサービスのJAX-WSとJAX-RS

こんにちは、SOAPベースのWebサービスでJAX-WSを使用しました。REST REST over SOAP私が here から研究したように。

しかし、さまざまな記事から、JAX-WSからRESTful Webサービスを作成できることも知っていました。しかし、ほとんどの人は、JAX-WSの代わりにJAX-RSを使用するべきだと言っています。

私の質問は、JAX-WS RESTful WebサービスとJAX-RS(jersey)の違い​​は何ですか? JAX-WSに対するJAX-RSの利点は何ですか?そして、なぜRESTful WebサービスにJAX-RSを使用する必要があるのでしょうか。

前もって感謝します。

25
Abhendra Singh

TL; DR

JAX-WSは、SOAPなどのXMLベースのWebサービス用です。 JAX-RSには同じ制限はありません。

JAX-WSは一般に、明確に定義されたコントラクト(WSDL)を使用したサーバー間相互作用に向けられており、通常、サービスとクライアント側が別々のグループに属している場合に使用されます。これは非常にリソースを集中的に使用するため、ネットワークまたはクライアントデバイスの機能が最適ではないクライアントとサーバー間の対話には適していません。

JAX-RSはクライアントからサーバーへの対話を対象としていますが、サーバーからサーバーへの通信も可能です。サービスの義務がほとんどないため、クライアントのニーズに合わせて調整できます。

より詳しい情報

JAX-RS APIはコードファーストアプローチのみを提供しますが、JAX-WSは、コードファースト(通常は推奨されません)とWSDLファイル(より一般的に推奨)を使用したコントラクトファーストの両方を可能にします。

JAX-RS 2.0は、より多くのマッピング機能を持つHttpUrlConnectionのスマートラッパーであるクライアントAPIを導入します。JAX-WSもラッパーですが、リファレンス実装で扱うデータは単なるXMLです。

JAX-RSには、さまざまなブラウザーやモバイルデバイスでのメッセージの作成とダイジェストがより簡単なAPI、つまりJSON構造を作成できるという利点があります。エンベロープの概念を導入せず、HTTPを使用します。暗号化やセキュリティを導入せず、HTTPSを使用します。

JAX-WSは暗号化のためにHTTPSで実行されますが、WS-SecurityPolicyなどを使用してセキュリティの追加を提供します。さらに、契約はWSDLを使用してしっかりと確立され、DataPowerなどのESBを使用してアプリケーションの外部で検証できます。

だから何を選ぶか

JAX-WSは一般に、明確に定義されたコントラクト(WSDL)を使用したサーバー間相互作用に向けられており、通常、サービスとクライアント側が別々のグループに属している場合に使用されます。これは非常にリソースを集中的に使用するため、ネットワークまたはクライアントデバイスの機能が最適ではないクライアントとサーバー間の対話には適していません。

JAX-RSはクライアントからサーバーへの対話を対象としていますが、サーバーからサーバーへの通信も可能です。クライアントとサーバー間の唯一の契約上の義務は、メッセージと要求ヘッダーです。サービスの義務がほとんどないため、クライアントのニーズに合わせて調整できます。

ただし、RESTfulサービスAPIを使用することは、RubyおよびPythonのようなメタプログラミングを実行することに似ています。これにより、合意されたスキーマが定義されておらず、実行時に問題が遅延します。技術的には双方によって強制されます。そのため、あらゆる場所でRESTfulサービスを推奨することはしませんが、静的HTML/CSS/JSを使用するWebアプリケーションを構築するときに通常発生する双方の制御がある場合は、それをお勧めします。データのRESTfulサーバーと通信します。

35