またまた前回の続き「碧(midori)のサーバ側のコードをScalaで!」で
作成したプロジェクトを色々な言語・通信方式でRPC呼び出してみました。
とりあえず適当に4つくらい実装しました。


【PythonでXML-RPC】
import xmlrpclib

server = xmlrpclib.ServerProxy("http://localhost:8080/midoriTutorial/rpc/helloService.xmlrpc")
result = server.hello('test')
print result


【RubyでXML-RPC】
require 'xmlrpc/client'

server = XMLRPC::Client.new2('http://localhost:8080/midoriTutorial/rpc/helloService.xmlrpc')
result = server.call("hello", "test")
p result


【Javascript(Prototype.js)でJSON-RPC 一部抜粋】
var ajax = new Ajax.Updater(
  {success: 'result'},
  'http://localhost:8080/midoriTutorial/rpc/helloService.json',
  {
    method: 'POST',
    contentType: 'application/json',
    postBody: Object.toJSON({
      method: 'hello',
      params: ['test'],
      id: (new Date()).getTime()
    }),
    onFailure: reportError
  }
);


【FlexでAMF】
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
  <mx:Script>
    <![CDATA[
      import mx.controls.Alert;
      import mx.events.FlexEvent;

      private var nameString:String = "テスト";
    ]]>
  </mx:Script>

  <mx:RemoteObject id="helloService" destination="helloService"
     result="Alert.show(event.result as String), 'Success'"
     fault="Alert.show(event.fault.toString()), 'Error'"
     endpoint="http://localhost:8080/midoriTutorial/rpc/messagebroker.amf">
    <mx:method name="hello">
      <mx:arguments>
        <symbol>{nameString}</symbol>
      </mx:arguments>
    </mx:method>
  </mx:RemoteObject>

  <mx:Button label="Call" click="helloService.hello.send()"/>
</mx:Application>


この中では個人的に「PythonでXML-RPC」が一番好きです!
こんな風に各種言語から多様な方式で通信出来ると
Thriftなどの多言語対応RPCフレームワークを使う機会がないなぁ~。