さらに多くの(まだ?)バージョン3のAWSフォークをサポートする代わりに、 WashOutを作成しました 。
gemは、それ自体が登録するSOAPのMIMEタイプに焦点を当てたrespond_toをサポートしています。 つまり、html、jsonを同等に生成し、SOAPにも応答するコントローラーを作成できます。 同時に、WashOutはbefore_filterなどのすべての標準Rails機能をサポートしています。
動作させる方法は?
gemを接続する
gem 'wash_out'
を
gem 'wash_out'
追加します。
目的のコントローラーを拡張する
アドレス空間を乱雑にしないために、WashOutはApplicationControllerに混在しません。 したがって、SOAPを使用するコントローラーごとに、モジュールを個別に接続する必要があります。
# app/controllers/api_controller.rb class ApiController < ApplicationController include WashOut::SOAP
WSDLの説明
各メソッドのパラメーターは、 soap_actionメソッドを使用して個別に説明されます。
soap_action "concat", :args => { :a => :string, :b => :string }, :return => :string def concat render :soap => (params[:a] + params[:b]) end
SOAPエラー生成と変更されたメソッド名の例。
soap_action "AddCircle", :args => { :circle => { :center => { :x => :integer, :y => :integer }, :radius => :double } }, :return => [], :to => :add_circle def add_circle circle = params[:circle] raise SOAPError, "radius is too small" if circle[:radius] < 3.0 Circle.new(circle[:center][:x], circle[:center][:y], circle[:radius]) render :soap => nil end
ルーティングを追加
コントローラーごとにルーティングも規定されています(この例では、ApiControllerです)。
# config/routes.rb HelloWorld::Application.routes.draw do wash_out :api end
利益!
このコントローラーのWSDLは、/ api / wsdl(または/ your_controller / wsdl)にあります。 SOAPは、他のすべてのメソッドとそのパスをすでに見つけています。
これが機能することをテストするには、Savon gemを使用できます。
require 'savon' client = Savon::Client.new("http://localhost:3000/api/wsdl") client.wsdl.soap_actions # => [:concat, :AddCircle] client.request(:concat) do soap.body = { :a => "123", :b => "abc" } end[:value] # => "123abc"
OSS軍隊にあなたが欲しい!
問題や開発のアイデアがある場合は、GithubでのIssueおよびPullリクエストをお待ちしています。
ありがとう