完全にRESTfulなサービスとは何かを理解するには、RESTfulサービスと標準のWebサービスの違いを理解する必要があると思います。これは、OracleによるJEE6チュートリアルで非常によく説明されています。
NonRESTful Webサービス(JavaではJAX-WSとして):ビッグWebサービスは、メッセージアーキテクチャとメッセージ形式を定義するXML言語であるSimple Object Access Protocol(SOAP)標準に準拠したXMLメッセージを使用します。このようなシステムには、多くの場合、インターフェースを構文的に定義するためのXML言語であるWebサービス記述言語(WSDL)で記述された、サービスによって提供される操作の機械可読記述が含まれています。SOAPメッセージ形式とWSDLインターフェース定義言語が広く採用されています。NetBeans IDEなどの多くの開発ツールを使用すると、Webサービスアプリケーションの開発の複雑さを軽減できます。SOAPベースの設計には、次の要素を含める必要があります。
■Webサービスが提供するインターフェースを説明するために、正式な契約を確立する必要があります。WSDLを使用して、メッセージ、操作、バインディング、Webサービスの場所などのコントラクトの詳細を記述することができます。WSDLを公開せずにJAX-WSサービスでSOAPメッセージを処理することもできます。
■アーキテクチャは、複雑な非機能要件に対応する必要があります。多くのWebサービス仕様は、そのような要件に対応し、それらに共通の語彙を確立します。例としては、トランザクション、セキュリティ、アドレス指定、信頼、調整などがあります。
■アーキテクチャは、非同期処理と呼び出しを処理する必要があります。このような場合、Web Services Reliable Messaging(WSRM)などの標準によって提供されるインフラストラクチャ、およびクライアント側の非同期呼び出しをサポートするJAX-WSなどのAPIをすぐに利用できます。
RESTful Webサービス(JavaではJAX-RSとして)Java EE 6では、JAX-RSはRepresentational State Transfer(RESTful)Webサービスの機能を提供します。RESTは、基本的なアドホック統合シナリオに最適です。多くの場合、SOAPベースのサービスよりもHTTPとの統合が優れているRESTful Webサービスは、XMLメッセージやWSDLサービス-API定義を必要としません。Project Jerseyは、JAX-RS仕様の本番環境に対応したリファレンス実装です。Jerseyは、JAX-RS仕様で定義されたアノテーションのサポートを実装しているため、開発者はJavaおよびJava仮想マシン(JVM)を使用してRESTfulWebサービスを簡単に構築できます。
Webサービスの種類RESTfulWebサービスは既存のよく知られたW3Cおよびインターネットエンジニアリングタスクフォース(IETF)標準(HTTP、XML、URI、MIME)を使用し、最小限のツールでサービスを構築できる軽量インフラストラクチャを備えているため、RESTfulWebを開発しますサービスは安価であるため、採用の障壁は非常に低くなっています。NetBeans IDEなどの開発ツールを使用して、RESTfulWebサービスの開発の複雑さをさらに軽減できます。以下の条件が満たされる場合、RESTful設計が適切な場合があります。
■Webサービスは完全にステートレスです。良いテストは、相互作用がサーバーの再起動に耐えられるかどうかを検討することです。
■キャッシングインフラストラクチャを活用してパフォーマンスを向上させることができます。Webサービスが返すデータが動的に生成されず、キャッシュできる場合は、Webサーバーやその他の仲介者が本質的に提供するキャッシュインフラストラクチャを利用して、パフォーマンスを向上させることができます。ただし、このようなキャッシュはほとんどのサーバーでHTTP GETメソッドに制限されているため、開発者は注意する必要があります。
■サービスプロデューサーとサービスコンシューマーは、渡されるコンテキストとコンテンツを相互に理解しています。Webサービスインターフェイスを説明する正式な方法がないため、両当事者は、交換されるデータを説明するスキーマと、それを意味のある方法で処理する方法について、帯域外で合意する必要があります。現実の世界では、RESTful実装としてサービスを公開するほとんどの商用アプリケーションは、一般的なプログラミング言語で開発者にインターフェイスを記述する、いわゆる付加価値ツールキットも配布しています。
■帯域幅は特に重要であり、制限する必要があります。RESTは、PDAや携帯電話などのプロファイルが制限されたデバイスで特に役立ちます。PDAや携帯電話では、XMLペイロード上のヘッダーのオーバーヘッドとSOAP要素の追加レイヤーを制限する必要があります。
■既存のWebサイトへのWebサービスの配信または集約は、RESTfulスタイルで簡単に有効にできます。開発者は、JAX-RSや非同期JavaScript with XML(AJAX)などのテクノロジー、およびDirect Web Remoting(DWR)などのツールキットを使用して、Webアプリケーションでサービスを利用できます。ゼロから始めるのではなく、既存のWebサイトのアーキテクチャを大幅にリファクタリングすることなく、サービスをXMLで公開し、HTMLページで使用することができます。既存の開発者は、新しいテクノロジーを最初から始めるのではなく、すでに慣れ親しんでいるものに追加するため、生産性が向上します。
使用するWebサービスの種類の決定
基本的に、Webを介した統合にはRESTful Webサービスを使用し、高度なサービス品質(QoS)要件を持つエンタープライズアプリケーション統合シナリオでは大きなWebサービスを使用する必要があります。
■Webサービス:エンタープライズコンピューティングで一般的に発生する高度なQoS要件に対応します。[..]
■RESTfull:RESTスタイルの制約の一部またはすべてを適用して、緩い結合(既存のクライアントを壊さずにサーバーを進化させるのが簡単)、スケーラビリティ(小さなものから始める)などの望ましいプロパティをアプリケーションに導入するWebアプリケーションを簡単に作成できます。および成長)、およびアーキテクチャの簡素化(プロキシやHTTPルーターなどの既製のコンポーネントを使用)。多くの種類のクライアントがRESTfulWebサービスを利用しやすく、サーバー側の進化と拡張が容易であるため、WebアプリケーションにJAX-RSを使用することを選択します。クライアントは、サービスの一部またはすべての側面を利用して、他のWebベースのサービスとマッシュアップすることを選択できます。