我已经看过很多关于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所以要温柔:) - 我敢肯定这可能比我要做的要容易得多。
答案 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,所以它不应该占用太多代码。