(1/3)新規のエンタープライズJava開発において現在有力視される3つのフレームの違いについて解説する連載。前回から複数回に分けて、MVCのViewとControllerにフォーカスして各要素を紹介しています。EEのJAX-RSについて。1、JSFとの違いやJAX-RSの使いどころを紹介します。本連載「3つのフレームワークで学ぶエンタープライズJava開発入門」では、3つの違いについて、アーキテクチャ、UI開発/画面の作り方、画面遷移、セッション管理、トランザクション、DBアクセス、開発生産性(ツール/デプロイ/CI/テスト)、外部システムとの連携などの観点から見ていきます。Frameworkの基礎知識とアーキテクチャ」では、本連載で取り上げる3つのフレームワークの概要について解説し、全体的なアーキテクチャを俯瞰しました。Framework各フレームワークのControllerやViewについての解説を行っています。EEのWebアプリケーション仕様であるJSFを紹介しました。EEのWebサービス仕様であるJAX-RSを取り上げます。1やJSFとの違いを明らかにします。その後、サンプルコードを通して基本的な機能を紹介し、JAX-RSの使いどころを紹介します。Transfer)とは、端的にいえば、HTTPの仕組みや考え方を最大限に生かしてWebサービスを構築する考え方を指します。特定のアーキテクチャやルールはありません。幾つかの原則や考え方があるだけです。RESTの4つの原則RESTによる設計原則は以下の4つに集約できます。【原則1】アドレス可能な「リソース」RESTでは、情報やデータを全て「リソース」という考え方で表現します。リソースはURIによって一意に識別します。【原則2】統一インタフェースリソースに対して操作をするためのメソッドはHTTPで定義されているGET、POST、PUT、DELETE、HEAD、OPTIONS、TRACEのみを使用します。使うのは、GET(取得)、POST(登録)、PUT(更新)、DELETE(削除)の4種類です。【原則3】表現指向とハイパーメディアリソースをさまざまな形式で表現できるようにします。HTMLやテキスト、XML、JSON、バイナリなどです。関連するデータはハイパーメディア(リンク)としてデータに含めることができます。【原則4】ステートレスな通信RESTでは基本的に、状態はクライアント側で保持し、サーバとのやりとりで必要な情報は全てリクエストに載せるようにします。これはすなわち、サーバ側ではクライアントの状態を保持するためにセッションスコープを用いないことを意味します。API(以下、API)を作れることです。これは、URIとHTTPメソッドによって処理が決定されるためです。従業員番号が「1」の従業員の情報を取得するためのAPIは次のようになります。HTTP/1.1また、従業員番号が1の従業員の情報を更新するためのAPIは次のようになります。name=hoge&age=35Webサービスの仕様にはRESTの他にもSOAPがあります。SOAPでは開発者が任意の名称のメソッドを定義できますが、WSDLのようなサービスを定義するためのドキュメントが必要になり、大掛かりな仕組みが必要になってしまいます。RESTでは、URIとあらかじめ決められた数種類のHTTPメソッドのみでAPIを構成するため、WSDLを必要とせずシンプルなAPIが作成できます。【利点2】XMLやJSON、バイナリなど多様なデータの表現に対応できる2つ目の利点は、【原則3】により多様なデータの表現に対応できることです。SOAPではデータの形式はXMLに限定されますが、RESTでは、XMLやJSON、バイナリといったさまざまなデータ表現に対応できます。そのため、ブラウザ以外からのアクセスにも適用が容易です。JavaScriptのAjaxからのアクセスや、スマートフォンのネイティブアプリからの通信への適用も容易です。最後は、【原則4】によるステートレス性に関する利点です。ステートレスな通信によりサーバ側で状態を保持しないことから、サーバ側でクライアントごとの状態を保持する必要がなくなります。そのため、サーバ増設による負荷分散が単純でスケールアウトが容易になります。ステーレス性については、作成するアプリケーションの内容やフレームワークの機能に応じて、トレードオフが発生することがあります。プログラムから使用することを前提とした、APIのようなシステムの場合は1度の通信で処理を完結させるために、ステートレスな通信とするべきです。ブラウザで使用することを前提とした画面ありきのECサイトや業務システムでは、画面の情報をクライアントで持ち回るよりもセッションスコープを用いた方が効率よく開発できる場合があります。セッションスコープで保持することが前提となっているフレームワークもありますので、自前でRESTに対応した認証の仕組みを作るよりも既存の仕組みを利用した方が良い場合があります。従来はURIが示すのは対応するプログラムでしたが、RESTではURIが示すのはリソースです。リソースとは単純に言えばそのシステムで扱う主要なデータを指します。そのデータをどう操作するのかをHTTPメソッドによって決めます。GETでデータを取得する、PUTでデータを更新するといった具合です。RESTではリソースが主役といえます。システムのデータ構造をリソースとして適切にURIで表現できると、システムの利用者に対して、推測しやすく直感的なAPIを提供できます。Railsといった他言語のフレームワークにも影響を与えています。APIの形式で公開しています。RESTはどこにでも登場してきますので覚えておいて損はありません。1から移行するとなるとアプリケーション設計に対する考え方をシフトする必要があります。Services)は、前述したRESTの原則に沿ったWebサービスをJavaで構築するための仕様です。6から採用された比較的新しい仕様です。7ではJAX-RSのバージョンは2.0です。JAX-RSは学習コストが少なく、シンプルなWebサービスを作るのに適しています。拡張機能を導入することでMVCフレームワークとしても使うこともできます。応用範囲が広くどこでも使えるフレームワークといえます。1と違って、設定ファイルや継承を用いず、多くの設定をアノテーションで行うのが特徴です。JAX-RSによるプログラムは、基本的にRESTのリソースと対応するリソースクラスを作成し、リソースクラスのメソッドにHTTPメソッドや表現形式をアノテーションで設定していきます。1のアクションやJSFのコントローラーに相当します。JSFとの違いは連載第1回で解説してます。概要についての図を再掲しておきます。1もHTTPを使用しています。これらのフレームワークではHTTPを重視せず、クライアントとサーバ間でデータを送るための経路くらいに考えています。JSFではHTTPのやりとりは隠蔽されていて開発者が意識することはほとんどありません。1では、Actionクラスと対応付けるのはURIのみです。URIに対して、GET、POSTどちらの呼び出しでも同じActionクラスのメソッドが実行されるので、HTTPメソッドによる処理の違いをさほど意識する必要がありません。RESTによるアプリケーションを作成する場合は、今までは深く考慮する必要がなかった、URIの設計やHTTPメソッドの使い分けなど、HTTP仕様に基づいた設計について考慮する必要があります。EE開発における有効なフレームワークなどをお伝えする。2015」が開催された。基調講演で紹介されたJavaテクノロジに関する話題を解説していきたい。8より導入された新しいメモリ領域を使いこなすためのテクニック、独自のトランザクショナルメモリ機構を実装した有効性などをお伝えする。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。