XML-RPC は HTTP 上 でリモート手続き呼び出しを行うための簡単で手軽な方法です。Perl, Java, Python, C, C++, PHP や多くの他のプログラミング言語で使用できま す。Unix と Windows, Macintosh 上で利用可能です。
Perl で書かれた短い XML-RPC クライアントを示します (Ken MacLeod の Frontier::Client を使用します)。
use Frontier::Client; $server = Frontier::Client->new(url => 'http://betty.userland.com/RPC2'); $name = $server->call('examples.getStateName', 41); print "$name\n"; |
実行すると、このプログラムはリモートのサーバに接続し、州名を得 て、それを表示します (この例の州番号 41 は South Dakota のはずです)。
Python での同じプログラムです (これでは Fredrik Lundh の xmlrpclib を使います)。
python> import xmlrpclib python> server = xmlrpclib.Server("http://betty.userland.com/RPC2") python> server.examples.getStateName(41) 'South Dakota' |
以降の章では、様々な言語で XML-RPC クライアントおよびサーバの書 き方を学びます。
XML-RPC は Dave Winer の公式仕様書で詳細に説明さ れています。興味があるなら、是非ご覧になってください。簡潔で明解な 文書です。
通信する上で、XML-RPC の値は XML にエンコードされます -
<methodCall> <methodName>sample.sumAndDifference</methodName> <params> <param><value><int>5</int></value></param> <param><value><int>3</int></value></param> </params> </methodCall> |
上記は冗長ですが、簡単に圧縮できます。また、予想以上に速い です - Rick Blair の測定によれば、Hannes Walln?er の Java での実装を使うと XML-RPC 呼び出しの応答時間は 3 ミリ秒です。
XML-RPC は以下のデータの種別をサポートします。
符号付 32 ビット整数
ASCII 文字列で空バイトも許されます。(実際にはたくさんの XML-RPC の実装が Unicode をサポートしています。XML の基本機 能に感謝。)
真か偽のどちらか
倍精度浮動小数点実数 (実際にはいくつかの実装で使えない かもしれません)
日付と時刻。残念ながら、XML-RPC はタイムゾーンの使用を 禁止しているので、これはほとんど役に立ちません。
任意長の生のバイナリデータ - 通信上 Base64 を使用して エンコードされます。とても役立ちます (けれどもいくつかの実装 では 0 バイトのデータ受信が行えません)。
値の一次元配列。個々の値はどんな種別でもかまいません
キーと値の集まり。キーは文字列です - 値はどんな種別 でもかまいません。
XML-RPC は、先行する二つのプロトコルから着想を得ています。そ の一つは、anonymous RPC であり、これは Dave Winer により設計され、 過去に DaveNet でのエッセイとして発表されたものです (XML-RPC サー バが /RPC2 下にインストールされることが多いの はこのためです)。もう一つの、より重要な着想は、SOAP プロトコルの初 期ドラフトによるものです。
より詳しい XML-RPC の歴史という文書を Dave Winer が提供してくれてい ます。この文書では、XML-RPC と SOAP との関係についても説明されてい ます。