連載第2回目は、ショッピングサイトの注文機能を題材にして簡単なWebサービスを構築してみましょう。必要な機能を決め、実装とテストを行い、最終的にはデータベースと連携させたいと思います。紙面の都合がありますので、データベース連携については次回以降に取り上げたいと思います。HTTPメソッドまずは、改めてHTTPメソッドについておさらいしておきましょう。JAX-RSでは、以下のHTTPメソッドを取り扱うことが可能です。Protocol」の引用GET指定されたURIのリソースを取り出す。POSTクライアントがサーバにデータを送信する。PUT指定したURIにリソースを保存する。DELETE指定したURIのリソースを削除する。HEADGETと似ているが、サーバはHTTPヘッダのみ返す。OPTIONSサーバを調査する。サーバがサポートしているHTTPバージョンなどを知ることができる。これらは、それぞれアノテーションとして提供されています。以下に、それぞれのアノテーションを利用したメソッドの定義例を載せておきます。提示したコードは、前回作成したプロジェクトを流用していますので、この回から読み始めた方は、前回の記事を参考にプロジェクトを作成してください。コードの全文は、SampleResource.javaとHelloResource.javaを参照)修正したコードの動作を確認するため、WTPとTomcatを使ってプロジェクトを起動します。Client」というツールが便利です。このツールは、画面上から簡単にHTTPメソッドを変更して、リクエストを送ることができます。Clientを使った各HTTPメソッドの実行結果を載せておきます。ResponseのBodyに表示されている結果は異なっています。これは想定した結果で、リクエストに使用したHTTPメソッドをJAX-RSが判断して、実行するHelloResourceのメソッドを切り替えているからです。注文機能の構築それではいよいよ本題に入りましょう。簡単ではありますが、ショッピングサイトの注文機能を構築していきたいと思います。Webサービスの構築なので、大目に見ていただければ幸いです。プロジェクトは、前回の記事で作成したプロジェクトを使用します。ユースケースを考えるまずは、注文機能のユースケースを考えてみましょう。アクターは、ショッピングサイトを利用する消費者だと思ってください。商品を注文する、注文した商品を取り消す、注文した商品の履歴を見るなどがあると思います。以下に、想定されるユースケースを挙げます。商品を注文する注文した商品を確認する注文した商品を更新する注文した商品を取り消す注文した商品の履歴を見るこの段階では、まだデータモデルについては考えません。必要なデータモデルは想像できると思いますが、実装を進めながら考えていきます。注文処理の実装とテストユースケースの中から「注文する」機能を取り上げて、実装とテストを繰り返しながら、ひとつのインターフェースを完成させましょう。テスト駆動開発で実装を進めますので、テストエラーとエラー解消の繰り返しになります。テストケースを作成します。プロジェクトにsrc/test/javaフォルダを作成してソースフォルダに指定し、配下に「jp.sample.jaxrs.service」パッケージを作成します。テストソースフォルダの設定そのパッケージに、「OrderResourceTest」クラスを作成します。クラスの中身は、以下のように記述します。}}JUnitを使用するので、pom.xmlに以下の依存関係を追記しておいてください。&lt;scope&gt;test&lt;/scope&gt;&lt;/dependency&gt;さて、WTPとTomcatを使ってプロジェクトを起動し、テストケースを実行してみます。当然のことながら作成したテストケースはエラーになります。エラーを解消するために、必要なクラスを追加しましょう。src/main/java配下のjp.sample.jaxrs.serviceにOrderResourceを作成します。order);}そして、OrderResourceの具象クラスであるItemOrderResourceを作成します。処理の中身は、引数で受け取った値を返却するだけです。}}さらに、Orderを作成します。Orderは注文情報を格納するJavaBeanです。{}最後に、applicationContext.xmlにItemOrderResourceをサービスとして定義します。&lt;/jaxrs:serviceBeans&gt;&lt;/jaxrs:server&gt;再度、テストを実行してみてください。今度はテストが成功します。今は注文情報であるOrderクラスには、何も定義されていせん。この程度にしておきます。Orderクラスに、上記の4項目を記述します。orderDate;...getter/setter...}テストケースで、Orderクラスのオブジェクトを作成し、WebClient#postメソッドに渡しましょう。レスポンスを検証します。}}テストを実行してみてください。単純ではありますが、ひとつのインターフェースが完成しました。このインターフェースに対して、データベース連携などを追加して、徐々に肉付けを行なっていきます。その他のユースケースの作成いったん、「注文する」機能の実装は終わりにして、その他のユースケースの機能を実装してみましょう。最初に、各ユースケースのテストケースを作成します。actual.getStatus());}テストケースを実行すると、もちろんエラーになります。アクセス対象となるメソッドが、OrderResourceに定義されていないからです。OrderResourceとItemOrderResourceにメソッドを定義しましょう。}}再度テストケースを実行すると、正常終了するはずです。テストケースに、レスポンスのアサーションを追加しておきましょう。設定ファイルの全文は、applicationContext.xml、pom.xmlを参照)以上で、すべてのユースケースのインターフェースを作成することができました。実装すべき処理や検討すべき事項がありますが、ひとまずはピザでも食べながら完成を喜びましょう!おわりに第2回はいかがだったでしょうか。Webサービスを作成することができました。インターフェースの定義が意外と単純に思えたのではないでしょうか?OrderResourceやItemOrderResourceを見てみると、アノテーションが付いているだけで、他にリクエストやレスポンスを解析するような処理は書いていません。従って、とても見やすいメソッド定義になっていると思います。次回は、データベース連携をおこなって、リクエストで受け取ったデータの登録や取得を実装してみたいと思います。アプリケーションらしくなるはずです。おしまい※.記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。月額150円から導入できるICリコーダー「ICタイムリコーダー」詳しくはこちら「お問合せ」開発のご依頼やシステム導入のご相談などお気軽にどうぞ10823136金融システムやさまざまな業務システム開発、ECサイトなどの各種Webサイト構築・開発、IC(RFID)を活用したシステム、技術者向けOJTやICタイムリコーダー等、システム開発に関わることならオープントーンにお任せください。HOMEシステム開発ソリューション開発事例ニュース会社情報サイトマップお問合せ。