誰向け記事
- rubyでSOAPを扱う必要がある人
- ちょっとrubyを触ったことがある人
なぜいまさら、SOAP
お仕事の関係で、SOAPを扱う必要がでてきました。BtoBではまだ現役で使われているところもあるかと思います。
なお、私はSOAPについて未経験。
SOAPとは
SOAP(ソープ)は、コンピュータネットワーク内のWebサービスの実装において、構造化された情報を交換するための通信プロトコルの仕様である。拡張性、中立性、独立性を導入することを目的とする。XML-RPCから発展した、XML Webサービスのための、XMLベースのRPCプロトコルである。
出典:wikipedia
言うならば、昔のAPIプロトコルですね。RESTでやるのが現代のスタンダードだと思います。
いいGemはないかしら、と探しているとありました。
基本的な使い方
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のタイプ指定を追加