XMLRPCからSOAP-RPCへ。

XMLRPCを使って、Macチームへのサービス提供開始。なかなか、評判は悪くない(と思う。)なにしろマックから情報取得できるんだからね。でも、やっぱりターミナルへの抵抗はあるみたい。僕のようなプログラマならイザ知れずデザイナーさんたちにとってはコマンド行はやっぱり抵抗があるようでもう一歩踏み込んでいきたい。ということで、いろいろ調べてみるとありました。AppleScriptに。

AppleScriptがバージョンアップしてメニューやウィンドウをもつ立派なアプリケーションを作成できるってことは知っていたのですが加えて、SOAPにも対応してるらしい!つまり、SOAPでサービスを提供すれば、GUI付きのアプリケーションが作成できるわけです。という訳でXMLRPCでサービスを開始したばかりですが、SOAPに移行する目論見で調査開始。

とりあえず、soap4rをインストールしてsampleを眺めてみると意外にもXMLRPCと同じくらいのステップでサービスを提供できるやり方がありました。WSDLなんて作成しなくとも、付属のサンプルをちょっと修正するだけでSOAPサーバは簡単に作れちゃうんですね。


#server.rb
require 'soap/rpc/standaloneServer'
require 'lovemac'

class LovemacServer < SOAP::RPC::StandaloneServer
  def initialize(*arg)
    super
    servant = LovemacService
    add_servant(servant, 'http://10.0.0.1/LovemacService')
  end
end
if $0 == __FILE__
  server = LovemacServer.new('LovemacServer', nil, '0.0.0.0', 3000)
  trap(:INT) do
    server.shutdown
  end
  server.start
end
#lovemac.rb
require 'mysql'
module LovemacService
  def self.conn()
    @mysql = Mysql::new('localhost','user','passwd','sample_db')
    @mysql.query('set character set utf8')
  end
  def self.getinfo(id)
    result = Array.new
    @mysql.query("select name,addr from sample_t where id >= #{id}").each do | c |
      result << { 'name'=>c[0],'addr'=>c[1] }
    end
    result
  end
  def self.disconn()
    @mysql.close()
  end
end

でも、これじゃ寂しいから勉強がてらちゃんとWSDLを定義してちゃんとサーバを作成してみることにします。肝心のマッククライアントのほうは、WSDLを提供できるようになってからでも遅くないかな。とりあえず、スクリプト版のクライアントは


#client.rb
require 'soap/rpc/driver'

  lms = SOAP::RPC::Driver.new('http://10.0.0.1:3000/','http://10.0.0.1/LovemacService')
  lms.wiredump_dev = STDERR if $DEBUG
  lms.add_method('conn')
  lms.add_method('getinfo','id')
  lms.add_method('disconn')

  lms.conn()
  result = lms.getinfo(1)
  result.each do | r |
    r.each { | k,v |
      puts "#{k}=>#{v}"
    }
  end
  lms.disconn

って感じ。

この記事のトラックバックURL:

http://hippos-lab.com/blog/trackback/143

Comments