Contents
- Wiki RPCとは
- Wiki RPCのメソッド
- Wiki RPCの実装状況
- Wiki RPCを使ってみる
- WikiのWebサービス化の可能性
- 実装面から〜XML-RPC、Atom API、REST。
- 利用案から。
- 参考
- Wiki RPC関連
- Atom WIKI関連
- その他
- このページについて
WikiとXML-RPC
Wiki RPCやAtom for Wikiなど、WikiのWebサービス面について。
Wiki RPCとは
XML-RPCのWiki用に定められたプロシージャ定義。
Wiki RPCのメソッド
JSPWikiのWiki 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 ) | array | UTCで指定された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エンジンごとに微妙に異なる。
- 0xDECAFBADのXmlRpcToWikiで実装例が公開されたtwiki、MoinMoin、ModWikiはWikiRPCInterface(Version 1)にputPageを独自実装したもの。
- MoinMoinはその後、Veriosn 2に準拠したものがリリースされている。
- 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は盛んに議論されたのが2002年と古く、実装状況がまちまちだったり、Auto-Discoveryなどといった議論がなかったり。
- Atom API(正式にはAtom Publishing Protocol)という手もある。
- AtomWiki/APIがYukiWikiで紹介されている。
- An Atom-Powered WikiでAtomでのWikiアクセスが解説されており、KWikiではこれに基づいたAtom Feed/Atom APIプラグインという実装がある。
- 提供サービスでKWikiを使用しているSocialTextのWeblogでAtom Wiki and the Writeable Webなどというエントリもある。
- Atom APIまでいくとRESTが主流なわけで、いっそAtomからもはなれてテキストそのままでRESTという話もある。RESTWikiが公開されている。
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関連
- 「全ての始まりであった」JSPWiki: Wiki RPC Interface()。
- 同サイトの次バージョンを検討するWikiRPCInterface2()。
- 上ページよりOpenWiki、TWiki、UseModWiki、MoinMoin、PhpWikiでの実装へのリンク。
- 0xDECAFBADのXmlRpcToWiki。#Downloadセクションにtwiki、ModWiki、MoinMoin用の実装がある。
- 0xDECAFBADのXmlRpcToWikiDiscussion()はこの話題の入り口として良さそう。
- WikiRpc - MoinMoin。MoinMoinのWiki RPC実装。
- ErfurtWikiのWikiXmlRpc。Wiki RPCにおける二つのスタンダード、MoinMoin/UseMod/TWikiの実装とJspWikiの実装を比較し、全てのパラメータがUTF-8エンコードされる後者を採ったとのこと。
- YukiWiki上のWikiRPC。
- XML-RPC for Wiki (FSWiki)。まかまか氏によるFSWiki用の実装例。
Atom WIKI関連
- AtomWiki/API - http://www.upian.net/znarf/atomwiki/client/AtomWiki/API
- YukiWiki上のAtomForWiki - AtomAPI のWiki向け仕様。
- XML.com: An Atom-Powered Wiki(excite翻訳1ページ目、2ページ目)。
- KWikiのAtom Feed/Atom APIプラグイン。
- Atom Wiki and the Writeable Web。Kwikiベースのサービスを提供するSocialTextのWeblogより。
その他
- 関連して利用できそうなモジュール。
- Wiki::Gateway - library for interacting with remote wikis。Wiki RPCを実装しているWikiに対してgetPage、putPage、daysAgoToDate、getAllPagesを行うことができる。
- HTML::WikiConverter - An HTML to wiki markup converter。HTMLを解析してWikiテキストに変換する。Wikiエンジンによって記法は異なるので、HTMLベースでのデータ交換は一番汎用性が高いのかも。
- Atom関連の投稿ツール「ecto」。
- [N] 「ecto 2.3」リリース http://netafull.net/archives/008310.html。
- ecto! : NDO::Weblog。
- ITmedia エンタープライズ:Blog投稿支援ツール「ecto」のWindows版1.0.4がリリース。
- BlogWrite - Atom API, XML-RPC に対応した Blog(ブログ)投稿クライアント。
- ITmedia エンタープライズ:これからの「Web」アプリに求めるべきもの (1/2)。
- 携帯電話向け機能を拡充、Podcastingに対応した「TypePad 1.6日本語版」。Atom APIの実装話としては最近のもの。
このページについて
| 作成者 | 塚本 牧生 |
| 内容 | WikiとWebサービスAPIのための事前調査 |