是否有使用ActiveResource和XMLRPC for Rails的示例?

时间:2009-12-27 22:15:15

标签: ruby-on-rails xml-rpc activeresource

我已经看过很多关于ActionWebService和XMLRPC的例子,但他们已经3年了,根据我的理解,ActiveResource应该取代ActionWebService。

我很熟悉ActiveResource如何使用XML与其他网站“交谈”并使用模型信息,但XML-RPC是一种完全不同的类型,其中传递了要执行的方法的名称并且请求被移交等等。

编辑 - 我知道ActiveResource应该如何工作 - 但我有一个客户端应用程序需要使用XML-RPC和定义的API(MetaWeblogAPI),我别无选择,只能实现它 - 双手并列。

所以 - 具体来说:我一直试图找到一些文档或关于如何使用ActiveResource使用Rails实现XML-RPC的文章。也许它不能 - 我也想知道我也是这样。我只是错过了“小小的飞跃” - “如何将请求交给方法”部分,我将方法名称从XML-RPC请求中拉出来并将其交给方法。我知道我在想这个。无法帮助它 - 我是一个.NET家伙:)。

我试图“使用有效的方法” - 这意味着我已经尝试实现ActionWebService但似乎它与Rails 2.3.5(这是我已经安装的)不一致,因为我一直在一个“Unknown Constant”错误指向安装的ActionWebService(这让我相信Rails 2.x不喜欢它)。

我有点像一个n00b所以要温柔:) - 我敢肯定这可能比我要做的要容易得多。

2 个答案:

答案 0 :(得分:2)

它比你想象的要容易得多。你不需要使用Rails来使用XMLRPC。您可以在需要时让Rails应用程序提供XML服务,只要您告诉您的操作如何处理.xml请求,您只需将.xml附加到任何URL即可请求XML。这是一个示例动作:

def show
  @post = Post.find(:all, :conditions => { :id => params[:id] }
  respond_to do |format|
    format.html do
      # this is the default, this will be executed when requesting http://site.com/posts/1
    end
    format.xml do
      # this will be rendered when requesting http://site.com/posts/1.xml
      render :xml => @post
    end
  end
end

这样,就没有必要进行花哨的XMLRPC调用,只需将.xml附加到URL,Rails就会知道如何提供XML服务。

要在ActiveResource中使用它,您只需执行类似这样的操作

class Resource < ActiveResource::Base
  self.site = Settings.activeresource.site # 'http://localhost:3000/
  self.user = Settings.activeresource.username # Only needed if there is basic or digest authentication
  self.password = Settings.activeresource.password
end
class GenreResource < Resource
  self.element_name = 'genre'
end
class ArtistResource < Resource
  self.element_name = 'artist'
end
class AlbumResource < Resource
  self.element_name = 'album'
end)
class TrackResource < Resource
  self.element_name = 'track'
end
class AlbumshareResource < Resource
  self.element_name = 'albumshare'
end

然后,在使用内置API rails提供的应用中,您可以执行TrackResource.exists?(34)track = TrackResource.new(:name => "Track Name"); track.save之类的调用。

Here's the documentation on ActiveResource。为了让ActiveResource工作,只需确保您的Rails应用程序知道在请求时使用respond_to提供XML。

答案 1 :(得分:0)

在这种情况下,我会保持我的ActiveResource站点/服务的美观,干净和RESTful。不要用XML-RPC搞砸它。

而是创建一个代理服务,一方面接受XML-RPC,另一方面将请求转换为ActiveResource。

然后,LiveWriter将通过XML-RPC与ActiveResourceProxyService通信,而ActiveResourceProxyService会将ActiveResource请求发送回Web应用程序。

听起来您正在实施一个简单的博客API,所以它不应该占用太多代码。