2002-12-17 (Tue) RubyUnitバンザイ [長年日記]

▲ test

<%= ws_isbn_image '0439139597'%>

▲ tDiary: WS-Amazon

ここ最近の Web Service 遊びの副産物として Amazon Web Service API を叩く Ruby のラッパーライブラリ WS-Amazon ができた。

さらにそれを利用して書影を表示する tDialy 用 plugin の tDiary/WS-Amazon も一応動いた。これを使えば Amazon のページデザイン変更に惑わされずに書影を手に入れることができる。

難点として SOAP4R は多くのライブラリに依存しているので、実行時にライブラリを読み込む bootstrap に時間がかかる。mod_ruby 環境でないとキツイかも。

もうひとつに現状では Amazon.com にある本しか扱えないという点。Amazon.co.jp にしか無い本は表示できない。これは Amazon が対応してくれないとどうしようもない。

WS-Amazon は ASIN/ISBN の検索しかサポートしていない状態だけど、もう少し気合があれば Amazon のサービスをフルサポートできなくもない。

▲ Amazon Web Service API 所感

Web Services Developer Kitには何度か騙された。付属するリクエストやレスポンスのサンプル XML の内容が実際と違っている。サンプルと同じ SOAP リクエストを投げても、まったく結果が返らないので困ってしまう。結局 Amazon SOAP WSDL を眺めつつ、正解であろう XML を推測しつつ HTTP をモニタリングしながらの作業となる。

どうでもいいけどサンプルとして付属する Java クライアントのコードはヒドすぎる。無意味に思える場面で継承を使っているのはまだよいとして、実際に SOAP のリクエストを投げる部分にまで、データ入力時に使った Swing の GUI オブジェクトを操作するコードが入り込んでる。MVC もあったもんじゃない。

他に Amazon Web Service API は、すべての API が、それぞれ引き数として専用の構造体(complexType)を受け取るようになっている。レスポンスも構造体や配列だ。primitive 型にしなかったのは、なにか意味があるのだろうか。多様な環境との相互接続性を確保する意味でも、これは Amazon にとって不利益ではないのかな。

この件もあって WSDL から SOAP クライアントの自動生成はやっていない。自動生成すると小さな構造体代わりのクラスを大量生産してしまう。WS-Amazon が High Level API として後方互換性を維持するのが難しくなりそうな予感がしたから手で作るという方針にした。

▲ RubyUnit

Ruby に不慣れな自分でも短期間で動作させることが出来たのは RubyUnit のお陰だ。細かい完成度や Ant と併用した使い勝手のよさで JUnit に少し劣るようだけど非常に助かった。

テスティングフレームワークは重要だ。