LoginSignup
2
1

More than 5 years have passed since last update.

いまさらながらのSOAP処理 ruby gem Savon

Posted at

誰向け記事

  1. rubyでSOAPを扱う必要がある人
  2. ちょっとrubyを触ったことがある人

なぜいまさら、SOAP

お仕事の関係で、SOAPを扱う必要がでてきました。BtoBではまだ現役で使われているところもあるかと思います。
なお、私はSOAPについて未経験。

SOAPとは

SOAP(ソープ)は、コンピュータネットワーク内のWebサービスの実装において、構造化された情報を交換するための通信プロトコルの仕様である。拡張性、中立性、独立性を導入することを目的とする。XML-RPCから発展した、XML Webサービスのための、XMLベースのRPCプロトコルである。

出典:wikipedia

言うならば、昔のAPIプロトコルですね。RESTでやるのが現代のスタンダードだと思います。

いいGemはないかしら、と探しているとありました。

Heavy metal SOAP client

基本的な使い方

client = Savon.client(wsdl: 'http://service.example.com?wsdl')
client.operations # 使えるオペレーションの一覧がでる
response = client.call(:find_user, message: { id: 42 }) # find_userというオペレーションでid 42をとってこいみたいな。
response.body # HTTPレスポンスのボディ、hashで値が入っています。

渡すパラメータに型を明示する

SOAPではmessageで渡すパラメータに型を明示させることができるみたいで、その指定方法にはまりました。

やり方は下記のように

client = Savon.client(
  wsdl: 'http://service.example.com?wsdl', 
  namespaces: { "xmlns:xs": "http://www.w3.org/2001/XMLSchema" } # 名前空間どれ使うかを指定できる。
) 
client.call(:update, message: {id: 42, attributes!: { id: "xsi:type": "xs:int" } } # idのタイプ指定を追加
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1