Axis2でREST(POX)形式のWebサービス | AAC通信

Axis2でREST(POX)形式のWebサービス

by simu

ここ最近、RESTについて調査していたのだが、どうも当初思っていた「HTTP GETするとXMLが返ってくる」ようなものは、RESTとは呼べないそうな。

この辺のRESTの本当の意味については、REST 入門 が一番参考になりそうなのでそちらを参照されたい。といっても、RESTについて説明されているサイトがあまりないですね。本来のRESTを実現したWebサービスってAtomPPを使用した、はてなサービスぐらいしかないのか?

で、今まで思っていた「HTTP GETするとXMLが返ってくるような」ものがRESTでないとすると、いったいなんだんだ?となってしまうが、これはPOX over HTTPとでも呼べば良いそうな。POXとはPlain Old XMLの略。

で、今回はAxis2を使用してREST(POX)のWebサービスを作成するサンプルを紹介します。
Axis2の現バージョンでは、REST(POX)までしかサポートされていないようだ。
(REST support in AXIS2 Java を見ると最新のソースでは、POST、PUT、GET、DELETEにも対応しているみたいだが。。。)

今回作成するものは、簡易的な勤怠管理サービスで、勤怠名に対して勤怠時間を管理することができるWebサービスです。プロジェクトは、Axis2のサンプル(quickstart)を元に作成しました。

ディレクトリ構成
作成したものは、二つのJavaクラスと、service.xmlだけです。
WLDataクラスは、勤怠管理用のPOJOデータクラスです。

WLData.java
WLServiceクラスはサービスとして公開するサービスクラスです。

WLService.java

このサービスクラスで、3つのメソッドを公開するようにします。
 - getWorkTime() 指定した勤怠名称の勤怠時間を取得
 - add() 指定した勤怠名称の勤怠時間を追加
 - getAllWL() 全ての勤怠を取得

また、勤怠時間の保存については、Hashクラスで誤魔化しています。

最後にservices.xmlです。「quickstart」にあるものを微修正しただけです。ServiceClassだけを変更すればOKです。

service.xml

以上で作成するファイルは終了です。というかAxis2ではWebサービスを作成すればREST(POX)も自動的にサポートされます。

次に「quickstart」に用意されているbuild.xmlを借用して、WLService.aarファイルを作ります。今回はAxis2に用意されているSimpleAxis2Serverを使用してサービスを確認します。WLService.aarをaxis2-1.2\repository\servicesにデプロイすれば準備完了です。

REST(POX)はURIの操作だけなので、特にクライアントを用意せずに確認してみます。

始めにアドレスバーにhttp://localhost:8080/axis2/services/と打ち込み、デプロイされていることが確認します。

Webサービス-確認

次にaddメソッドを以下のパラメタで叩き、AACの勤怠時間を4.5にしてみます。
 - workLoadTime = AAC
 - time = 4.5
上記メソッドを叩くために、URLは以下のようにします。
http://localhost:8080/axis2/services/WLService/add?workLoadName=AAC&time=4.5

Webサービス-AAC-ADD001

このメソッドはvoid型なので、プラウザには何も表示されません。登録できたか、以下のURLで確認してみます。

Webサービス-AAC-GET001

うまく登録されているようです。では、連続的に以下のURIを叩いてみます。

http://localhost:8080/axis2/services/WLService/add?workLoadName=ZZZ&time=9.0 ZZZに9.0時間割り当てる
http://localhost:8080/axis2/services/WLService/add?workLoadName=AAC&time=5.0 AACに5.0時間追加する
http://localhost:8080/axis2/services/WLService/getAllWL 全ての勤怠を表示する

getAllWLの表示を見ると、、、

Webサービス-AAC-ALL001

うまく機能しているようですね。

出力を見る限り、SOAPメソッドのEnvelopeを取り除いた形を出力するようです。あんまり見栄えは良くないですね。おそらくカスタマイズすればもうちょっと、見られるXMLにはなると思います。

JavaのRESTの他の実装としてRestlet というRESTに特化したフレームワークもあるようです。ただあまり使われていないようですが。。。

今後REST(POX)を活用して、勤怠管理のWebサービス及びクライアントを作りたいと考えています。
構想としては以下。
 - サーバサイドは、Java又はRuby(Ruby On Rails)でWebサービスとして作成
 - クライアントサイドは、HTML + JavaScriptだけで作成
 - 認証 と クライアントサイドのJavaScriptの勉強が課題
 - サーバサイドは何とかなるのでは?