みなさん、こんにちは。富士通ラーニングメディアの松井です。
現在、Javaによる業務システムは大きな変革期にあります。
1つ目の潮流は、REST APIの利活用や提供のニーズが高まっていることです。モバイルアプリケーションのバックエンドやシステム間連携を容易にするため、REST APIを提供し、レスポンスをJSONなどのデータで返すアーキテクチャに注目が集まっています。
2つ目の潮流は、これまで使用されてきたオープンソースのフレームワーク(StrutsやSeaser2)がEOL(End of Life:サポート終了)となったことです。このため、Java EEの標準技術に移行する需要が高まっています。
「REST API」をキーワードに、「イマドキの業務システム開発」を読み解いていく本シリーズの第2回では、「どうやってREST APIベースの業務システムを開発するの?」という疑問について、Java EE 7という最新の標準フレームワークを使用した開発方法をご紹介していきます。
REST APIベースの業務システムの詳細については、前回のコラムをご覧ください。
<時代はAPIファースト!? イマドキの業務システム開発ことはじめ>
第1回 なぜ流行っている?「REST API」 ~アプリもインフラ作業の自動化もAPIで!~
第2回 REST APIベースの業務システム開発(Java編)
第3回 イマドキの業務システムはフロントエンドも重要です!
Java EE(Java Platform, Enterprise Edition)とは、サーバサイド向けアプリケーションに必要な機能の仕様の集合(API群)です。
2000年代のJavaのアプリケーション開発においては、Java EEの前身であるJ2EEの開発生産性の低さもあり、オープンソースのフレームワークが台頭していました。ただし、オープンソースのフレームワークは、必ずしも長期的にサポートされるとはかぎらない点に注意が必要です。現に、代表的なオープンソースフレームワークであったStruts1.xとSeasar2は、EOL(End of Life)となっています。
オープンソースフレームワークの諸技術を取り込み、Java EEの最新バージョンでは標準技術のみで高い生産性で堅牢な業務システムを開発可能です。また、後方互換性も十分に考慮されており、長期的な安定性を見込むことができます。
Java EEは仕様の集合であり、アプリケーションの各機能を実現する仕様が定義されています。以下に、REST APIベースの業務システムを開発するにあたり、必要となる仕様を示します。
上図は、Java EEでREST APIベースの業務システムを開発する場合に使用する各要素技術をマッピングしたものです。
クライアントからリクエストがあると、Bean Validation による入力値検証後、JAX-RSで実装したREST APIで定義されたリクエストに応じた処理を実行し、データベースへの問い合わせについてはJPA/JTAを通じて行われます。また、一般的に業務システムは役割ごとのレイヤーに分割して構成しますが、メンテナンス性を向上させるため、CDIによってレイヤー間を疎結合に保ちます。
JavaによるREST API開発の中核となるのはJAX-RSです。
Java EE 7の最注目の仕様の一つで、JAX-RSのバージョンが2.0に上がり、RESTクライアント(REST APIを呼び出すクライアント側のプログラムを実装する仕組み)やフィルタ(毎回のリクエスト/レスポンス時に共通的に実行する処理を定義する仕組み)など様々な機能が追加されました。
REST APIベースの業務システムとして、あるショッピングサイトを例に考えてみましょう。
Webサイトからの注文だけでなく、将来はモバイルアプリケーションからの注文も、同じシステムで受け付けられるようにREST APIを定義したとします。では、以下のような注文情報の取得に関するREST APIがあった場合のJAX-RSでの実装例をみてみましょう。
JAX-RSでは、REST APIで提供する処理を定義するクラス(リソースクラス)を、アノテーション(注)を付与することで作成します。
リソースクラスには、リクエスト(HTTPメソッドおよびURLパターン)に対応したリソースメソッドを定義します。
(注)クラスやメソッドなどに対してメタデータとして付加情報を設定する機能
普段からプログラムに慣れ親しんでいる方なら、JAX-RSのソースコードを初見でも直感的に理解していただきやすいのではないでしょうか。
HTTPメソッドのGETの例をご紹介しましたが、POSTやPUT、DELETEなども同様に定義可能です。
ここまでJAX-RSを簡単にご紹介してきましたが、実際の業務システムでは、データベース連携やレイヤー間を疎結合に保つ仕組みが必要です。また、Java EEによるREST APIベースの業務システムの全体像や各要素技術の連携方法を理解することも重要です。
Java EEを習得するには、サンプルアプリケーションを動かし、実際にプログラミングすることが一番です。
ただ、独学だと1つ1つの要素技術は理解できても、要素技術の連携や技術の適用場面について体系的に理解するのは難しいかもしれません。
そんなときは、体系的な知識を短期集中で学習できる講習会がオススメです。
JavaEEによるRESTfulアプリケーション開発(UFN57L):
この講習会では、Java EEの全体像や各要素技術を学習したあと、総合演習を行います。総合演習では、API仕様書をインプットとして、サーバサイドで各要素技術が連携したシステムを開発します。3日間をとおして、実践的にJava EEによるREST APIベースの業務システムの開発スキルを習得できます。
今回はサーバサイドのREST API構築方法を中心にみてきました。
では、サーバサイドから渡されたJSONデータを使用して、クライアントサイドでUIを構築するにはどうすればいいのでしょうか。また、魅力なUIはどのような流れでつくればいいのでしょうか。
第3回目は、「イマドキの業務システムはフロントエンドも重要です!」についてご紹介します。次回もお楽しみに!
今回のコラムでREST APIに興味を持った方は、是非「REST API」のコースマップもご覧ください。
主にJavaやHTML/CSS/JavaScriptなどのWebアプリケーション開発コースを担当。
最近はRuby、Pythonなどのスクリプト言語やLinux、クラウドなどインフラ技術も勉強中。
アプリケーション開発のオールマイティSEとなるべき、精進の毎日。
プライベートでは、セーリングと日本酒を愛する自由人。
日本酒の今年の目標は、新潟越後の93酒蔵の利き酒を全制覇すること。
(2017/03/02)