November 16, 2005

MVC and Web APIs

naoyaのはてなダイアリー - MVCフレームワークにおける Web API 実装

Sledge における Web API (XML-RPC/AtomPP) のハンドリングについての言及がありました。これからの MVC フレームワークに求められる必要条件の一つとしてこの Web API を処理しやすいかどうかというのは重要な気がします。

MVC フレームワークと Web APIs (XML-RPC, REST, SOAP) な話。

Catalyst や Sledge なんかの XML-RPC 実装なんかもプラグインででてきていて、Sledge::Plugin::XMLRPC は CPAN から入手できるわけですが(グッジョブ!)、どうも利用者側の実装方法が若干スマートにならない気がしています。

というのは、

use Sledge::Plugin::XMLRPC;
sub dispatch_xmlrpc {
    my $self = shift;
    $self->xmlrpc;
}
sub xmlrpc_echo {
    my $self = shift;
    return join " ", @_;
}

という感じで、XML-RPC だけ処理する メソッドを作らないといけないんじゃないか? という部分ですね。これは Catalyst のプラグインも同じです。

まあ実装方法にもよるわけですが、やはり MVC や DRY を考えると、API の Transport レイヤーを気にせずドメインロジックを実装する というのが美しい姿なのかなぁと。たとえば Amazon Web Services が REST と SOAP で同一の API が利用可能なように。

どこかで理想的な作り方があったなぁと use Perl; を検索してみたら、So I've written Attribute::WebService. I'll stick it on CPAN this week, though it's pretty raw right now. という 2001 年に Matt Sergeant が書いた journal がひっかかってきたり。Transport レイヤーをうまく抽象化して再利用ができるようになるとステキですよね。

という風に見ると、API の Transport レイヤーは MVC の View なんじゃないかという風にも見えたり。blosxom という Blog ソフトで一番関心したのは URL とテンプレートの拡張子がマッピングしていて、index.html で XHTML, index.rss で RSS 2.0, index.atom で Atom フィードというように View をカンタンに切り替えられる点。多くの Blog ソフトが RSS/Atom フィードをテンプレートで出力することから考えても、データフィードや IO を View として分離するのがスマートだなぁと感じます。

で、Web API と MVC なんて話でいうと、

Model-View-Controller in Web 2.0

Think about it like Address Book - with a database backend (the model) and a web services API (the controller), the actual web site itself becomes just one of potentially many views on the data.

Web 2.0 のサービスアーキテクチャを MVC にたとえた記事も。これはすごくストレートに入ってきます。Web API を Controller として提供して、それを利用するサードパーティやデスクトップアプリが View となる。データ提供者は Model と Controller だけを実装して、それを remix / consume する側がさまざまな View を用意できるというアーキテクチャ。

naoya さんはこの記事に 「デスクトップアプリケーションが V で API が C という考え方。(API は C というか M だと思うけど。)」 とコメントしていて面白い。これは API を利用するサードパーティ から(しかもアーキテクチャではなく実装サイドから)見た意見なのだと思います。たとえば、amazlet の実装の中では Amazon Web Service は Model となる。

ただ、アーキテクチャという視点では、iTMS を例にとれば、iTMS のデータベースは Model, プロトコルが Controller で、iTunes の UI が View というのはしっくりきます。いろんな視点で各所に MVC 的な役割分担が見えてくるのも興味深い。

Posted by miyagawa at November 16, 2005 01:32 PM | Permalink | Comments (1) | TrackBack(0)
Comments

「Web 2.0 のサービスアーキテクチャを MVC にたとえた記事も。これはすごくストレートに入ってきます。・・・」
のところなのですが、ちょっと宣伝っぽくなりますが、私の会社で作っている Busium Formula という製品は、ウェブ・システムを MVC 分離パターンに合わせてデザインし直したような設計になっていて、Controller の部分を XML によって設定できるような形になっています。それでもって、これを今後、Model を外部のSOAPや公開されたWEB API に対して接続可能とし、View を統合するという形の発展を考えています。

Posted by: 谷口佳久 on December 15, 2005 10:51 PM
Trackbacks
TrackBack URL for this entry: http://blog.bulknews.net/mt3/mt-tb.cgi/1853
Post a comment