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