Contents
  1. Wiki RPCとは
    1. Wiki RPCのメソッド
    2. Wiki RPCの実装状況
    3. Wiki RPCを使ってみる
  2. WikiのWebサービス化の可能性
    1. 実装面から〜XML-RPC、Atom API、REST。
    2. 利用案から。
  3. 参考
    1. Wiki RPC関連
    2. Atom WIKI関連
    3. その他
  4. このページについて

WikiとXML-RPC

Wiki RPCやAtom for Wikiなど、WikiのWebサービス面について。

Wiki RPCとは

XML-RPCのWiki用に定められたプロシージャ定義。

Wiki RPCのメソッド

JSPWikiWiki RPC Interface Version 2がスタンダードと言えそうで、Wikiサイト上のページ名の取得やページ内容の取得、ページ情報の取得、ページ内容の更新を行うためのプロシージャが用意されている。

ただし、実装によってはWiki RPC Interface Version 1に基づくものもあるし、独自のAPIを持つものもある。

メソッド 返り値 説明
Version 1 API
wiki.getRPCVersionSupported()intこのWikiAPIのバージョンでは1を返す。
wiki.getAllPages()array全頁のリストを返す。結果はURLエンコード中のUTF-8のリスト。
wiki.getRecentChanges( Date timestamp )arrayUTCで指定されたtimestamp以降に更新されたページを取得する。返り値は配列で、要素はそれぞれが構造体。
wiki.getPage( String pagename )utf8(*)ページの最新版の生のWikiテキストを返す。ページ名はUTF-8で、URLエンコードされていること。返り値はUTF-8エンコードされたページデータのバイナリオブジェクト。
wiki.getPageVersion( String pagename, int version )utf8(*)ページの生のWikiテキストを返す。UTF-8がURLエンコーディングされた部分以外はUTF-8が返る。
wiki.getPageHTML( String pagename )utf8(*)HTMLレンダリングされたページを返す。UTF-8がURLエンコーディングされた部分以外はUTF-8が返る。
wiki.getPageHTMLVersion( String pagename, int version )utf8(*)HTMLレンダリングされたページをUTF-8で返す。
wiki.getPageInfo( string pagename ) struct要素の構造体を返す。
wiki.getPageInfoVersion( string pagename, int version ) struct通常のgetPageInfo()とまったく同様の構造体を返すが、こちらでは指定されたバージョンのものになる。
wiki.listLinks( string pagename )array与えられたページへの全てのリンク。
Version 2 API
wiki.getRPCVersionSupported()intこのWikiAPIのバージョンでは2を返す。
wiki.getBackLinks( utf8 page )arrayこのページにリンクしているページを返す。
wiki.putPage( utf8 page, utf8 content, struct attributes )booleanページのコンテンツを書き込む。
Version 2で検討されていたAPI
wiki.listAttachments(utf8 page)array与えられたページへの添付ファイルのリストを返す。配列は、getAttachment(またはputAttachment)の引数に入れることが出来る、utf8の添付ファイル名から成る。
wiki.getAttachment(utf8 attachmentName)base64添付ファイルの内容を返す。
wiki.putAttachment(utf8 attachmentName, base64 content)添付ファイルを書き込む(上書きする)。
独自実装API
wiki.filterData(utf8 data, string contentType, struct params)struct※twikiのみ実装
wiki.putPage( String pagename, utf8 text )booleanページの生のWikiテキストをセットする。成功時にはbooleanのtrueを返す。

utf8(*) : Version 1ではbase64エンコードすることとなっていたが、Version 2でutf8コード、base64エンコードなしと変更された。

「Version 2で検討されていたAPI」というのは、Version2のページで「私たちがたぶん必要とするもの」とされているもの。 添付ファイル関連のプロシージャで、実際にはその後実装されていないように見受けられる。 そもそも添付ファイルに対応していないWikiもある。

Wiki RPCの実装状況

実装はWikiエンジンごとに微妙に異なる。

  • 0xDECAFBADXmlRpcToWiki実装例が公開されたtwiki、MoinMoin、ModWikiはWikiRPCInterface(Version 1)にputPageを独自実装したもの。
  • ErfurtWikiはVersion 1まで。
  • phpWikiはVersion 1まで。ただし、Version 2を実装しCVSにコミットしたというコメントがあり、デモも設置されている。
  • FSWikiはVersion 2まで実装。ただしページのバージョンの概念がないため、getPageVersion、getPageHTMLVersion、getPageInfoVersionを実装していない。

以下は実装状況の一覧。

メソッド JSP Wiki twiki MoinMoin ModWiki phpWiki ErfurtWiki FSWiki
Version 1 API
wiki.getRPCVersionSupported()
wiki.getAllPages()
wiki.getRecentChanges( Date timestamp )
wiki.getPage( String pagename )
wiki.getPageVersion( String pagename, int version ) ×
wiki.getPageHTML( String pagename )
wiki.getPageHTMLVersion( String pagename, int version ) ×
wiki.getPageInfo( string pagename )
wiki.getPageInfoVersion( string pagename, int version ) ×
wiki.listLinks( string pagename )
Version 2 API
wiki.getBackLinks( utf8 page ) × × × × ×
wiki.putPage( utf8 page, utf8 content, struct attributes ) × × × ×
独自実装API
wiki.filterData(base64 data, string contentType, struct params) × × × × × ×
wiki.putPage( String pagename, base64 text ) × × × ×

Wiki RPCを使ってみる

まかまか氏がFree Style Wiki用のWiki RPC実装を公開している。 実際にFSWikiとWiki RPCを設置し、遊んでみる。

WikiのWebサービス化の可能性

WikiのWebサービス化にについて概況する。

実装面から〜XML-RPC、Atom API、REST。

XML-RPC、Atom API、RESTについての最近の議論が、Wikiについてもあてはまりそう。

Wiki RPCの議論が落ち着いてしまってから、Webサービスの時流が来て、しかもAtom APIが登場したため、APIに興味を持つ人が多いのにデファクト・スタンダードなAPIがないという時期にある。議論の再燃と、デファクトの登場を期待したい。

そのデファクトが何になるのかは見えないのだが、KWikiでAtom APIを実装している(+XML-RPCを実装していない)ことや、「携帯電話向け機能を拡充、Podcastingに対応した『TypePad 1.6日本語版』」等の動きを見ると、強いて言えばWebサービスの流れに沿ってAtom API方向に流れるように思える。

利用案から。

いずれになるにせよ、単純なAPIは非常に広範な活用例を生み出すことが期待できる。

  • 他ツールとの連携。単純なドキュメンテーションツールであるWikiは他アプリケーションとの相性がよく、ツール間でのデータ受け渡しがAPIかされることでこうした活用は増えそうだ。例えば、特に随時更新でき最新版に保たれるWikiと、ある時点でのデータの公開やアナウンスをできるblogは相補的な役割で活用できる。
  • サイト間の連携。Wikiサイト間での連携が容易になる。またデータ交換が頻繁になれば、互いに記法が異なるWikiテキスト形式よりも、それぞれがHTMLパーサを備え共通のHTML形式でデータ交換をすることが議論されるだろう。
  • フロントエンドとバックエンドの分離。トリッキーな方法ではあるが、レンダリングエンジンとデータストア間をWiki RPCやAtom API、RESTでつなぐことで、両者をソフトウェア的にも、ロケーション的にも分離できるかもしれない。さらには後者を、クラスタ化することまで考えられるようになるかもしれない。

参考

以下は参考にしたURL。

Wiki RPC関連

Atom WIKI関連

その他

このページについて

作成者 塚本 牧生
内容 WikiとWebサービスAPIのための事前調査
Last modified: 2006-06-20 Attached files total: 48MB