今更XML-RPC

XML-RPCはHTTPプロトコルを使用しXMLをメッセージ媒体として利用して、リモート手続きを呼び出す(Remote Procedure Call)ための非常に簡単な方法である。
詳しいことは、はてなキーワードの[XML-RPC]を見る他、用語辞典を参照。
仕様書はhttp://lowlife.jp/yasusii/stories/9.htmlにて日本語訳で閲覧できる。
SOAPの基礎となっている他、XML-RPCの簡易性からblog、P2Pなど様々な面で使用されている。
PythonXML-RPCを利用するにはxmlrpclib、サーバにSimpleXMLRPCServerを使用する。

クライアント例:郵便番号から住所を取得する(yubin.py)

01: import sys
02: import xmlrpclib
03: def main(postnum) :
04:  serv=xmlrpclib.ServerProxy("http://yubin.senmon.net/service/xmlrpc/")
05:  s_obj=serv.yubin
06:  data=s_obj.fetchAddressByPostcode(postnum)
07:  add=data[0]
08:  print "%s %s %s(%s %s %s)" % (add['pref'],add['city'],add['town'],add['pref_kana'],add['city_kana'],add['town_kana'])
09: if __name__=='__main__' :
10:  if len(sys.argv)==2 :
11:   postnum=sys.argv[1]
12:   main(postnum)
13:  else :
14:   print ">python yubin.py <POST_CODE>"


実行例:
>python yubin.py 1130033
東京都 文京区 本郷(トウキョウト ブンキョウク ホンゴウ)

全国郵便番号一覧 - 郵便専門ネットの[WEBサービス]を利用した。

他言語では、

  • Perlの場合、「XMLRPC::Lite」などの外部モジュールを使う。(SOAPSOAP::Lite)
  • Javaの場合、「marquee.xmlrpc」「org.apache.xmlrpc」などを使う。(SOAPはorg.apache.axis)

最近でXML-RPCを使っていたと言えば、http://www.freedom-to-tinker.com/tinyp2p.htmlですな。凄まじく醜く単に「短く書いた」ということだけのPythonコード。
JXTAもメッセージの交換はXML形式だし、XMLが万能であるというのではなくて、「ネットワークでやり取りする情報はXMLで十分」と言う考えが一般的なのかな。タグが増えてバイト数がcsvなどの形式に比べて遙かに多いが、共通性とか汎用性に優れているのは確か。上から決めるトップダウン式の言語仕様ではなく、下を自由に決められるボトムダウン式の言語仕様を、XMLの曖昧さ(→拡張性の高さ)によって可能にしている。
参考:http://www.linux.or.jp/JF/JFdocs/XML-RPC-HOWTO/