WikiとWebサービスAPI
WikiとWebサービスAPI(1)

WebサービスAPIの流行


Blogが投稿用のWebサービスAPIを提供
Amazon、Google、Yahooなどが各種情報取
得のためのWebサービスAPIを提供
最新WebサービスAPIエクスプローラ(ISBN:47741-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 RPCを使ってみる(図1)
(1)FS Wikiの設置
(2)Wiki RPCの追加
(CGI設置ディレクトリ、要書込み権限)
wiki.cgi(要Perlパス修正)
wiki_xmlrpc.cgi(要Perlパス修正)
config
wikigate.cgi(要Perlパス修正)
data
lib
docs
lib
plugin
theme
tmpl
wiki3_5_9.zipの内容
attach
backup
pdf
temp
空フォルダを作成
図1:FSWikiとWiki RPCの設置
Wiki_xmlrpc-204.tar.gzの内容
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
$VAR1
$VAR1
$VAR1
$VAR1
=
=
=
=
=
{'lastModified'
{'lastModified'
{'lastModified'
{'lastModified'
{'lastModified'
=>
=>
=>
=>
=>
'20050827T11:59:06','version'
'20050827T11:59:06','version'
'20050827T11:59:06','version'
'20050827T11:59:06','version'
'20050827T11:59:06','version'
=>
=>
=>
=>
=>
'1','author'
'1','author'
'1','author'
'1','author'
'1','author'
=>
=>
=>
=>
=>
'','name'
'','name'
'','name'
'','name'
'','name'
図2:Wiki RPCによるページ一覧とページ情報の取得
=>
=>
=>
=>
=>
'FrontPage'};
'Help'};
'Help/FSWiki'};
'Help/Hiki'};
'Help/YukiWiki'};
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エクスプローラに
 解説



KwikiにAtom APIをサポートするプラグイン


Atom Autodiscoveryなどより練りこまれた仕組
XML-RPCのアプリケーション/サイトごとに異なる命令群に対
し、RESTの統一的な利用法
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エンジン
ブラウザアクセス
getPaceHTML
getPageText
putPageText
変換
Wikiストレージ
getPageText
getPageText
getPageText
図4:WikiエンジンとWikiストレージを切り離したWikiシステム
今後の可能性(図5)
Wikiプラグインサーバ
Wikiストレージサーバ
Wikiエンジンサーバ
blogエンジンサーバ
図5:より分散化したWikiシステム
Wikiストレージバックエンド
ダウンロード

WikiのWebサービスAPI