2009-07-08 11 views
2

Ruby on RailsのRESTfulメソッドが期待するパラメータは公開されていますか? SOAPを使用すると、WSDLを使用できますが、RoRはRESTfulサービス用にWADLまたはWSDL 2.0を実装していますか? 編集:私は、ActionWebServiceを使用してSOAPベースのソリューションを認識しています。私はあなたがレール2.3.2を使用して、次のコマンドRuby on RailsのRESTfulサービス用WADL/WSDL 2.0

を使用してActionwebservice宝石をインストールしようとした場合https://wadl.dev.java.net/

答えて

1

答えは "ノー" であると読むことができます。 Railsはこれを行う方法を提供していません。理論的には可能な限りRESTfulなHTTPのサポートは非​​常に限定されています(例えば、ハイパーメディアをサポートしていないなど)、WSDL 2.0はおそらく誰にも使われていません。 WADLは、RESTコミュニティ内でも受け入れに問題があります。 Java Jerseyフレームワークを除いて、私は実装について認識していません。

+0

WADLを生成することができたとしても、それは使えますか?あなたは今何しないことができますか? –

+0

私は、クライアントが署名に基づいてスタブを自動的に生成できるように、RESTfulサービスのためにメソッドシグニチャを事前に提供する方法があるかどうかを見たいと思っていました。これが現在できるかどうかわかりません。 –

+1

私は理解していますが、Rubyはメソッドを呼び出すためのどこかに定義されたインタフェースを必要としないので、そのスタブがあなたに何を買うのでしょうか? –

4

はい、あなたの条件のためのソリューションは、レールにActionwebservice宝石をインストールしているのRoRのと同等に参照のうえましたステップ1:

$ gem install datanoise-actionwebservice --source http://gems.github.com 

ステップ2:のconf/environment.rbに

0123に宝石を追加
config.gem 'datanoise-actionwebservice', :lib => 'actionwebservice' 

ステップ3:あなたは/アプリ/サービス

ステップ4で生成されたWebサービスのファイルを見ることができるWebサービス

$ ./script/generate web_service webservice_name 

を生成します。あなたのコントローラ

class YourController < ApplicationController 
    wsdl_service_name 'webservice_name' 
    web_service_api webservice_nameApi 
    web_service_scaffold :invocation if Rails.env == 'development' 

def add(name, value) 
    Your.create(:name => name, :value => value).id 
end 

end 
を変更

ステップ5:アプリでAPIクラスを変更/サービス

class WebserviceNameApi < ActionWebService::API::Base 
    api_method :add, :expects => [:string, :string], :returns => [:int] 

end 

ステップ6: WSDLファイル

$ ./script/server 
$ curl http://localhost:3000/controller/wsdl 
+0

@Srinivaslyer詳細な回答をいただきありがとうございます。しかし、私はSOAPベースのソリューションを避けようとしています。 RESTfulなサービスを使用している場合、サービスがどのように動作するかを知らないクライアントが、サービスが期待するパラメータを知る方法はありません。 RoRのWADLを使用して予想されるパラメータを公開する現在の方法があるかどうかは疑問です。 –

+0

@vdrolia:これはSOAPベースのソリューションです。 actionwebserviceはSOAPまたはxmlrpcを使用します。 –

0

REST Describe & Compileを使用して、WADLに基づいてRubyクライアントを生成することができます。あなたはそれについての非常に素晴らしい詳細なドキュメントをGoogleドキュメントで見つけることができます。