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
って感じ。










Comments