まもなくCatalyst-Plugin-XMLRPC-0.05がリリースされます
id:naoyaさんのはてなブックマークでXML-RPCをCatalystで簡単に実装できるようにするプラグインCatalyst::Plugin::XMLRPCを知りました。また、id:naoyaさんによるMVCフレームワークにおける Web API 実装のエントリーを見ていると、フレームワークを利用する開発者が下のレイヤーを意識せずに簡単にWebサービスを実装できれば、便利になるだろうなぁと、思うようになりました。
そこで、ちょっと面白そうなので試してみようと思い、Catalyst 5.56にそのモジュールをインストールしてみました。しかし残念ながら、サンプルコードを試してもなかなかうまくいきませんでした。このモジュールを昔ながらのprintデバッグやらをして色々調べているうちに、これはきっとバグだと思うようになりました。
大胆にも、不慣れな英語でこのモジュールの作者にバグレポートをメールしてみました。
返信が来るかちょっと心配でしたが、作者から返信がちゃんときました!早速、レポートしたバグを直して頂きました。もう少しでCPANからダウンロードできるようになるはずです!
Re: Troubles with Catalyst-Plugin-XMLRPC-0.04 > Hi, I'm Yoshinori Sano, a Catalyst user and also Perl beginner. > > I faced some troubles with your Catalyst plugin, Catalyst-Plugin- > XMLRPC-0.04. > It doen't work properly. > > I use Catalyst 5.56 now. > > I coded the following to test Catalyst-Plugin-XMLRPC-0.04. > I couldn't call echo() method via $c->xmlrpc(); > > -- > # include it in plugin list > use Catalyst qw/-Debug XMLRPC/; > > # Public action to redispatch > sub rpc : Global { > my ( $self, $c ) = @_; > $c->xmlrpc; > } > > # Methods with Remote attribute in same class > sub echo : Remote { > my ( $self, $c, @args ) = @_; > return join ' ', @args; > } > > sub add : Remote { > my ( $self, $c, $a, $b ) = @_; > return $a + $b; > } > -- > > It seems to be a bug, I think. > The code "$p->parse_more( $c->req->body );" in the > _deserialize_xmlrpc() > fails whenever it deserializes an XML-RPC request. > > I checked "ref($c->req->body)". The result was "File::Temp". > > So, I tried to change "$p->parse_more( $c->req->body );" to > "$p->parse_more(`cat $c->req->body`);"(quick hack). > It worked! > > However, some troubles are in your module yet. > I can't still get expected results. I've just uploaded a fixed 0.05 release, thanks for the report! -- sebastian
こんなへたくそな英語でも、ちゃんと意図が伝わったので、感動しました。
本当は、もう少し詳細にバグレポートを書きたかったのですが、ライティング力不足で遠まわしにしかバグを伝えることしかできませんでした。反省。ライティング力をもっと磨いて、CPANに貢献できるようになれば、幸せだなぁと強く思うようになりました。
いつかSixApartの宮川さんのようなCPAN Authorになることを目指して。。(道のりは険しい)
追記 (11/22 01:00)
リリースされたばかりのCatalyst-Plugin-XMLRPC-0.05で再度チャレンジしてみました。うまくいきました。Catalyst::Plugin::XMLRPCのperldocのサンプルコードにある「add」で「1+2」ができただけでも十分感動しました。XML-RPCのハンドラがこんなにも簡単に実装できるなんて、本当に凄い時代になったものだなぁと改めて思いました。
0.04からのコードの変更点は、ここで見られます。quick hackで示したコード($p->parse_more(`cat $c->req->body`);)の意図がちゃんと伝わっていて良かったです。この部分の修正方法はある程度予想(id:miyagawaさんが書かれたPHP::Sessionのt/lib/TestUtil.pmのコードを読んだ経験から)していましたが、Catalyst::Action->newを使っている所は、全く予想もしていなかったコードでした。
あと全然関係ないけど、感動したことを一言。Catalystの「t/live*」のコードはかなり熱い。じっくり読んでみる必要があると思いました。