Wiki と Web サービス API
Wiki と Web サービス API ( 1 ) Web サービス API の流行 Blog が投稿用の Web サービス API を提供 Amazon 、 Google 、 Yahoo などが各種情報 取得のための Web サービス API を提供 最新 Web サービス API エクスプローラ ( ISBN: ) Google Hacks ( ISBN: )
Wiki と Web サービス API ( 2 ) XML-RPC での API 提供( 2002 年頃) Wiki RPC Version 1 JSP Wiki で提案、 twiki 、 MoinMoin 、 ModWiki 、 phpWiki などでも実装される。 参照系の機能が中心、データを base64 エンコード。 Wiki RPC Version 2 JSP Wiki で提案、 MoinMoin 、 FSWiki などで採用。 更新のための putPage などが追加される。 データは基本的に utf-8 、 base64 エンコードはしな い。 強いて言えば Wiki RPC ベースのものが多い。 2002 年頃の議論で終わってしまっているため、あま り利用されてない?
Wiki と Web サービス(表 1 ) 表 1 : Wiki RPC で定義されているプロシージャ
Wiki と Web サービス(表 2 ) 表 2 : Wiki RPC の実装状況
Wiki RPC を使ってみる( 1 ) FSWiki 向けの Wiki RPC の実装 FSWiki まかまか氏が XML for Wiki で公開 XML for Wiki 設置 Sourceforge から wiki3_5_9.zip を取得、展 開 Sourceforge XML for Wiki から wiki_xmlrpc-204.tar.gz を取得し、同ディレクトリに展開
Wiki RPC を使ってみる(図 1 ) wiki.cgi (要 Perl パス修正) ( CGI 設置ディレクトリ、要書込み権限) configdatadocslibpluginthemetmplattachbackuppdftemp wiki3_5_9.zip の内容 空フォルダを作成 (1) FS Wiki の設置 wiki_xmlrpc.cgi (要 Perl パス修正) lib Wiki_xmlrpc-204.tar.gz の内容 wikigate.cgi (要 Perl パス修正) (2) Wiki RPC の追加 図 1 : FSWiki と Wiki RPC の設置
Wiki RPC を使ってみる( 2 ) Perl の XMLRPC-Lite モジュールでアクセ ス Wiki ページ一覧とページ情報の取得 wiki.getAllPages と wiki.getPageInfo を使 用 ソースと結果は図 2 Wiki への投稿と、 HTML 形式での取得 wiki.putPage と wiki.getPageHTML を使用 ソースと結果は図 3
Wiki RPC を使ってみる(図 2 ) ■ ソース use XMLRPC::Lite; use Data::Dumper; $Data::Dumper::Indent = 0; my $url = ' my $pages = XMLRPC::Lite->proxy( $url )->call('wiki.getAllPages')->result; foreach my $page { my $info = XMLRPC::Lite->proxy( $url )->call('wiki.getPageInfo', $page)->result; print Dumper($info), "\n"; } ■ 結果 $VAR1 = {'lastModified' => ' T11:59:06','version' => '1','author' => '','name' => 'FrontPage'}; $VAR1 = {'lastModified' => ' T11:59:06','version' => '1','author' => '','name' => 'Help'}; $VAR1 = {'lastModified' => ' T11:59:06','version' => '1','author' => '','name' => 'Help/FSWiki'}; $VAR1 = {'lastModified' => ' T11:59:06','version' => '1','author' => '','name' => 'Help/Hiki'}; $VAR1 = {'lastModified' => ' T11:59:06','version' => '1','author' => '','name' => 'Help/YukiWiki'}; 図 2 : Wiki RPC によるページ一覧とページ情報の取得
Wiki RPC を使ってみる(図 3 ) ■ ソース use XMLRPC::Lite; use Jcode; my $url = ' my $page = jcode( ' 投稿テスト ' )->utf8; my $text = jcode( utf8; !!! 投稿テスト結果 [XMLRPC for Wiki| 経由で投稿。 * 投稿できるのか? * 投稿したページを取得できるか? EOF print "[ 投稿結果 ] “, XMLRPC::Lite->proxy( $url )->call('wiki.putPage', $page, $text)->result, "\n"; print "[ 取得結果 ]\n “, XMLRPC::Lite->proxy( $url )->call('wiki.getPageHTML', $page)->result; ■ 結果 [ 投稿結果 ] 1 [ 取得結果 ] 投稿テスト 結果 XMLRPC for Wiki 経由で投稿。 投稿できるのか? 投稿したページを取得できるか? 図 3 : Wiki RPC によるページの投稿と取得
Wiki RPC を使ってみる(図 4 ) 図 4 : Wiki RPC で投稿したページ
今後の可能性( 1 ) Web サービス API 仕様の方向 Atom API 最新 Web サービス API エクスプローラに 解説 Atom Autodiscovery などより練りこまれた仕組 XML-RPC のアプリケーション / サイトごとに異なる命令 群に対し、 REST の統一的な利用法 Kwiki に Atom API をサポートするプラグイン Wykiwyg を公開した Socialtext が使用しているなど、 Kwiki の動向は無視できなくなる可能性が。 REST Atom 、 XML を使わないプレインテキストの REST REST Wiki
今後の可能性( 2 ) Wiki API が可能にすること Wiki のより自由な活用 Wiki の閲覧、更新を快適にするクライアント 複数の Wiki を横断するめた Wiki アプリケーション 共有ストレージとしての活用 ワークフローツールへの組み込み Wiki のより自由なアーキテクチャ Wiki エンジンが Wiki ストレージに API でアクセス Wiki プラグインが Wiki エンジンや Wiki ストレージに API でアクセス 分散 Wiki ストレージ化
今後の可能性(図 4 ) 図 4 : Wiki エンジンと Wiki ストレージを切り離した Wiki システム ブラウザアクセス getPaceHTML getPageText Wiki エンジン Wiki ストレージ getPageText 変換 putPageText getPageText
今後の可能性(図 5 ) 図 5 :より分散化した Wiki システム Wiki エンジンサーバ Wiki ストレージサーバ Wiki プラグインサーバ Wiki ストレージバックエンド blog エンジンサーバ