[Rails] [ANN] WebserviceHelper

Tobias Luetke tobias.luetke at gmail.com
Sun Jan 30 14:48:53 GMT 2005


This is awesome! 

Lets talk in IRC, i'm sure we can generalize this further so that
XMLRpc can be supported with the same domain keywords.

ActiveService anyone?

On Sun, 30 Jan 2005 20:54:22 +1300, leon breedt <bitserf at gmail.com> wrote:
> Hello fellow Railers,
> 
> I've written a WebserviceHelper which I thought some folks may find useful.
> 
> What does it do?
> =============
> 
> Provides an easy way to drop in SOAP-based web services into your
> controllers. It can generate typed WSDL for you, which means people
> using .NET can use your web service and they'll still get their nice
> "int", "bool", "CustomStruct" types in their C#-side API.
> 
> How does it work?
> ==============
> 
> Its pretty non-intrusive. Declare that you are using the helper in
> your controller, and indicate which actions are going to serve as
> "entry points" (ports in WSDL terminology) to your API.
> 
> Example:
> 
> class ApiController < ApplicationController
>   helper :webservice
> 
>   wsdl_port :person, PersonApi.new
> end
> 
> What this does is generate the :person action, installing a filter
> object to dispatch SOAP actions when /api/person is accessed by
> clients. It also creates "wsdl" action accessible via /api/wsdl, which
> will output a WSDL file for the API.
> 
> To get the typing right, you need to annotate attributes and methods
> in your PersonApi class to indicate the desired types for method input
> parameters and return values.
> 
> Example:
> 
> class PersonApi
>   extend WebService
> 
>   wsdl
>   def some_method_with_no_parameters_or_interesting_return_values
>   end
> 
>   wsdl :out => [[Integer]]
>   def method_returning_int_array
>      [1, 2, 3]
>   end
> 
>   wsdl :in => [String]
>   def method_expecting_string(str)
>   end
> end
> 
> See http://blog.xeraph.org/software/WebserviceHelper/doc/ for more
> details on how it hangs together.
> 
> Where do I get it?
> ==============
> 
> http://blog.xeraph.org/software/WebserviceHelper/WebserviceHelper-0.1.tar.gz.
> 
> Just extract over your Rails app, contains
> app/helper/webservice_helper.rb and lib/web/service.rb.
> 
> The bulk of the code lies in lib/web/service.rb, and the vast majority
> of code in there is just to do with mapping between SOAP, WSDL and
> Ruby types. Someone more knowledgeable in this area, feel free to
> criticize the implementation, as I'm sure mine sucks :)
> 
> I don't believe you about .NET interoperability, how do I test that?
> ==================================================
> 
> Have Mono or .NET framework installed (I've only testetd on Mono though).
> 
> Do:
> 
> $ wget http://localhost:3000/controller/wsdl
> $ mv wsdl Something.wsdl
> $ wsdl -o Something Something.wsdl
> $ vi SomethingService.cs
> ... add a Main() that calls methods on a SomethingService instance ...
> $ mcs -reference:System.Web.Services SomethingService.cs
> $ mono SomethingService.exe
> 
> Comments, bug reports, suggestions welcome!
> Leon
> _______________________________________________
> Rails mailing list
> Rails at lists.rubyonrails.org
> http://lists.rubyonrails.org/mailman/listinfo/rails
> 


-- 
Tobi
http://www.hieraki.org   - Open source book authoring
http://blog.leetsoft.com - Technical weblog


More information about the Rails mailing list