Path: | README.rdoc |
Last Update: | Fri Jan 01 16:09:48 -0500 2010 |
Rails has native support for xmlrpc. Most people are familiar with the ‘xmlrpc/client’ library. The ‘xmlrpc/server’ library examples mostly make an assumption that you will run a standalone server.
xmlrpc-endpoint allows you to instead expose normal Rails controller methods via XMLRPC, tied to an xmlrpc endpoint route in your app.
Install
gem install xmlrpc-endpoint config.gem "xmlrpc-endpoint" (inside environment.rb Rails::Initializer block) -- OR -- ./script/plugin install git://github.com/wkoffel/xmlrpc-endpoint.git
Setup your environment
# set up a route to the action "xe_index" in your controller # (this "xe_index" action will be created for you by the xmlrpc-endpoint, the route must point at 'xe_index' action to work) # In a future release, xmlrpc-endpoint may support auto-generation of this route, and customization map.connect 'api/xmlrpc', :controller => 'my_api_controller', :action => 'xe_index'
Add this code to your controller:
class MyApiController < ApplicationController exposes_xmlrpc_methods def hello_world puts "Hello XMLRPC." end end
Then, pointing an XMLRPC client at the defined route, your normal controller actions will handle the requests.
require 'xmlrpc/client' server = XMLRPC::Client.new2("http://localhost:3000/api/xmlrpc") server.call("hello_world")
To use a custom namespace prefix on all exposed methods (for example, if using someone else‘s specified protocol like MetaWeblog), declare a method_prefix:
class MyApiController < ApplicationController exposes_xmlrpc_methods :method_prefix => "metaWeblog." # This method will be exposed externally as "metaWeblog.newPost()" def newPost(blogid, username, password, struct, publish) ... end etc. end
Thanks to Nathan Crause for saving me some time on the details of avoiding the standalone server. nathan.crause.name/entries/programming/xlm-rpc-under-ruby-on-rails
Copyright (c) 2010 Will Koffel, released under the MIT license.