1 RESTful Webサービスの概要
RESTful Webサービスは、Java API for RESTful Web Services (JAX-RS)を使用し、Representational State Transfer (REST)アーキテクチャ・スタイルに従って開発するJava EE Webサービスです。
RESTアーキテクチャ・スタイルの概要
RESTとは、Simple Object Access Protocol (SOAP)のように追加のメッセージ層を使用することなく、HTTPなどの標準化されたインタフェースでデータを転送するためのシンプルなインタフェースを記述したものです。RESTはアーキテクチャ・スタイルであり、ツールキットではありません。リソースまたは特定の情報のソース(データおよび機能)として表示される、ステートレスなサービスを作成するための設計ルールのセットを提供します。各リソースは一意のURI (Uniform Resource Identifier)で識別されます。
クライアントはURI、標準化されたメソッドの固定セットを使用してリソースにアクセスし、リソースの表現が戻されます。リソースの表現は、一般的にリソースの現在または意図された状態を取得するドキュメントです。クライアントは、新しいリソース表現を受け取るたびに転送状態に設定されます。
表1-1に、アプリケーションがRESTfulだと見なされるために従う必要のある、RESTアーキテクチャ・スタイルにより定義された制約のセットを定義します。
表1-1 RESTアーキテクチャ・スタイルの制約
制約 | 説明 |
---|---|
アドレス可能度 |
URI (Uniform Resource Identifier)を使用してすべてのリソースを識別します。英語では、URIは名詞と同じです。 |
共通インタフェース |
HTTPメソッド(GET、POST、PUT、DELETE)などの共通インタフェースを使用して、リソースへのアクセスを可能にします。英語の類推を適用して、これらのメソッドは動詞と見なされ、名前付けされたリソースに適用できるアクションを説明します。 |
クライアント・サーバー・アーキテクチャ |
クライアントとサーバーを、インタフェース要件とデータ・ストレージ要件とに分割します。このアーキテクチャは、サーバー・コンポーネントを簡略化することで、複数のプラットフォーム間でのユーザー・インタフェースの移植性と拡張性を高めます。 |
ステートレスな相互作用 |
ステートレスな通信プロトコルを使用します。通常はHypertext Transport Protocol (HTTP)です。すべてのリクエストは、特定のリクエストに必要なすべての情報を含む必要があります。セッション状態はクライアントにのみ保存されます。 この相互作用のスタイルにより、次のことが向上します。
|
キャッシュ可能 |
クライアントのレスポンスのキャッシングを可能にします。レスポンスはキャッシュ可能かキャッシュ不可能かに識別される必要があります。キャッシングにより、一部の相互作用は必要なくなり、効率性、拡張性、および認識されるパフォーマンスが向上します。 |
階層化システム |
クライアントがエンド・サーバーに直接接続するのではなく中間サーバーに接続できるようにします(クライアントは認識しません)。中間サーバーの使用は、ロード・バランシングと共有キャッシングを提供することで、システムの拡張性を向上させます。 |
RESTful Webサービスとは
RESTful Webサービスは、REST原則に従って構築され、それによりWebで適切に動作するように設計されたサービスです。
RESTful Webサービスは、表1-1に定義されたアーキテクチャ・スタイル制約に従います。通常、RESTful WebサービスはHTTPプロトコル上に構築され、GET、POST、PUT、DELETEなどの共通HTTPメソッドにマップされる操作を実装し、リソースをそれぞれ取得、作成、更新、削除します。
WebLogic ServerでのRESTful Webサービスの開発の標準サポート
WebLogic Serverでは、次のJAX-RS APIおよび参照実装(RI)をサポートしています。
-
JAX-RS 2.0 Rev a
-
Jersey 2.22.4
ノート:
Jersey 2.x (JAX-RS 2.0 RI)のサポートが今回のリリースのWebLogic Serverでデフォルトで提供されています。共有ライブラリとしての登録は不要になりました。
Jersey 1.xのサーバー側APIはサポートされなくなりました。かわりに、対応する標準のJAX-RS 2.0またはJersey 2.x APIを使用する必要があります。Jersey 1.xクライアントAPIは非推奨になりました。JAX-RS 2.0クライアントAPIを使用するように、RESTfulクライアント・アプリケーションを早急に更新することをお薦めします。
Jersey 2.x (JAX-RS 2.0 RI)には次の機能が含まれます。
-
Jersey
-
JAX-RS API
-
JSON処理およびストリーミング
表1-2に、Jersey 2.x (JAX-RS 2.0 RI)とともに提供される主な機能を示します。
表1-2 Jersey 2.x (JAX-RS 2.0 RI)の主な機能
主な機能 | 説明 |
---|---|
クライアントAPI |
RESTful Webサービスと標準的な方法で通信します。Client APIにより、HTTPプロトコル経由で公開されるWebサービスの使用が容易になり、既存の安定したクライアント側のHTTPコネクタ実装を利用するクライアント側のポータブル・ソリューションを開発者が簡潔に効率よく実装できるようになります。 詳細は、次を参照してください。
|
非同期通信 |
リクエストを非同期に呼び出して処理します。 詳細は、次を参照してください。
|
フィルタおよびインターセプタ |
フィルタを使用して、ヘッダー情報など、インバウンドおよびアウトバウンドのリクエストとレスポンスを変更します。インターセプタを使用して、エンティティの入力ストリームおよび出力ストリームを変更します。フィルタおよびインターセプタは、クライアント側とサーバー側の両方で使用できます。 詳細は、Jersey 2.22 User Guideの「Filters and Interceptors」を参照してください。 |
JAX-RSとサンプルの詳細は、「RESTful Webサービスについてさらに学習」を参照してください
RESTful Webサービスの実装のロードマップ
表1-3 RESTful Webサービスおよびクライアントの実装のためのロードマップ
タスク | 詳細情報 |
---|---|
RESTful Webサービスを開発します。 |
|
RESTful Webサービスを呼び出すクライアントを開発します。 |
|
RESTful Webサービスをパッケージ化およびデプロイします。 |
|
RESTful Webサービスを保護します。 |
|
RESTful Webサービスをテストします。 |
|
RESTful Webサービスを監視します。 |
|
(オプション)既存のアプリケーションをJersey 1.xから2.xに移行します。 |
Jersey 2.22 User Guideの「Migration Guide」 |
RESTful Webサービスについてさらに学習
表1-4 詳細に関するリソース
リソース | リンク |
---|---|
Jerseyユーザー・ガイド |
|
Jersey API Javadoc |
|
JerseyプロジェクトのWikiコミュニティ |
|
JSR-339 JAX-RS 2.0仕様 |
|
JAX-RS API Javadoc |
|
JAX-RSプロジェクト |
|
RESTful Webサービス(JAX-RS)サンプル |
Oracle WebLogic Serverの理解のサンプル・アプリケーションとコード例 |
Java EE 7チュートリアル-JAX-RSを使用したRESTful Webサービスの構築 |
|
『Architectural Styles and the Design of Network-based Software Architectures』 (Roy Fieldingの論文)の「Representational State Transfer (REST)」 |
|