150 likes | 330 Views
Wiki と Web サービス API. Wiki と Web サービス API ( 1 ). Web サービス API の流行 Blog が投稿用の Web サービス API を提供 Amazon 、 Google 、 Yahoo などが各種情報取得のための Web サービス API を提供 最新 Web サービス API エクスプローラ( ISBN:4-7741-2496-6 ) Google Hacks ( ISBN:4-87311-136-6 ). Wiki と Web サービス API ( 2 ). XML-RPC での API 提供( 2002 年頃)
E N D
WikiとWebサービスAPI(1) • WebサービスAPIの流行 • Blogが投稿用のWebサービスAPIを提供 • Amazon、Google、Yahooなどが各種情報取得のためのWebサービスAPIを提供 • 最新WebサービスAPIエクスプローラ(ISBN:4-7741-2496-6) • Google Hacks(ISBN:4-87311-136-6)
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の実装 • まかまか氏がXML for Wikiで公開 • 設置 • Sourceforgeからwiki3_5_9.zipを取得、展開 • XML for Wikiからwiki_xmlrpc-204.tar.gzを取得し、同ディレクトリに展開
wiki.cgi(要Perlパス修正) wikigate.cgi(要Perlパス修正) wiki_xmlrpc.cgi(要Perlパス修正) temp pdf lib tmpl theme attach lib docs data config backup plugin Wiki RPCを使ってみる(図1) (1)FS Wikiの設置 (2)Wiki RPCの追加 (CGI設置ディレクトリ、要書込み権限) wiki3_5_9.zipの内容 Wiki_xmlrpc-204.tar.gzの内容 空フォルダを作成 図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 = 'http://localhost/fswiki/wiki_xmlrpc.cgi'; my $pages = XMLRPC::Lite->proxy( $url )->call('wiki.getAllPages')->result; foreach my $page (@{$pages}) { my $info = XMLRPC::Lite->proxy( $url )->call('wiki.getPageInfo', $page)->result; print Dumper($info), "\n"; } ■ 結果 $VAR1 = {'lastModified' => '20050827T11:59:06','version' => '1','author' => '','name' => 'FrontPage'}; $VAR1 = {'lastModified' => '20050827T11:59:06','version' => '1','author' => '','name' => 'Help'}; $VAR1 = {'lastModified' => '20050827T11:59:06','version' => '1','author' => '','name' => 'Help/FSWiki'}; $VAR1 = {'lastModified' => '20050827T11:59:06','version' => '1','author' => '','name' => 'Help/Hiki'}; $VAR1 = {'lastModified' => '20050827T11:59:06','version' => '1','author' => '','name' => 'Help/YukiWiki'}; 図2:Wiki RPCによるページ一覧とページ情報の取得
Wiki RPCを使ってみる(図3) ■ ソース use XMLRPC::Lite; use Jcode; my $url = 'http://localhost/fswiki/wiki_xmlrpc.cgi'; my $page = jcode( '投稿テスト' )->utf8; my $text = jcode( <<EOF )->utf8; !!! 投稿テスト結果 [XMLRPC for Wiki|http://www.donzoko.net/cgi/fswiki_xmlrpc/]経由で投稿。 * 投稿できるのか? * 投稿したページを取得できるか? 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 [取得結果] <h2><a name="p0"> <a href="wiki.cgi?page=%C5%EA%B9%C6%A5%C6%A5%B9%A5%C8" class="wikipage">投稿テスト</a>結果</a></h2> <p><a href="http://www.donzoko.net/cgi/fswiki_xmlrpc/">XMLRPC for Wiki</a>経由で投稿。</p><ul> <li> 投稿できるのか? </li> <li> 投稿したページを取得できるか? </li> </ul></ul> 図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) Wikiエンジン Wikiストレージ ブラウザアクセス getPaceHTML getPageText 変換 getPageText getPageText putPageText getPageText 図4:WikiエンジンとWikiストレージを切り離したWikiシステム
今後の可能性(図5) Wikiプラグインサーバ Wikiストレージサーバ Wikiエンジンサーバ Wikiストレージバックエンド blogエンジンサーバ 図5:より分散化したWikiシステム