2009-12-27 3 views
3

Я видел массу примеров с ActionWebService и XMLRPC, но им 3 года, и, насколько я понимаю, ActiveResource должен заменить ActionWebService.Есть ли пример использования ActiveResource и XMLRPC для Rails?

Я знаком с тем, как ActiveResource может использовать XML для «разговора» с другими веб-сайтами и использования информации о модели, но XML-RPC - это совсем другой тип, в котором вы передаете имя метода, который хотите выполнить и запрос передан и т. д.

EDIT - я знаю, как должен работать ActiveResource, но у меня есть клиентское приложение, которое должно использовать XML-RPC с определенным API (MetaWeblogAPI), и у меня нет выбора но реализовать его - руки связаны.

В частности: Я пытался найти некоторые документы или написать о том, как XML-RPC может быть реализован с помощью Rails с использованием ActiveResource. Возможно, этого не может быть - я хотел бы знать, что тоже занимаюсь. Я просто пропущу «маленький прыжок» - «как вы передаете запрос на метод», где я получаю, чтобы вытащить имя метода из запроса XML-RPC и передать его методу. Я знаю, что я слишком задумываюсь об этом. Не могу это сделать - я парень .NET :).

Я попытался «использовать то, что работает» - это означает, что я пытался реализовать ActionWebService, но кажется, что он не играет хорошо с Rails 2.3.5 (это то, что я установил), поскольку я сохраняю получив ошибку «Неизвестная константа», указывающая на установленную ActionWebService (что заставляет меня полагать, что Rails 2.x это не нравится).

Я немного n00b, поэтому будьте нежны :) - Я уверен, что это, наверное, намного проще, чем я это делаю.

ответ

2

Это намного проще, чем вы думаете. Вам не нужно гадать с XMLRPC с Rails. Вы можете просто заставить приложение 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 рельсам обеспечивает, вы можете сделать вызовы, такие как TrackResource.exists?(34) и track = TrackResource.new(:name => "Track Name"); track.save т.д.

Here's the documentation on ActiveResource. Для того, чтобы ActiveResource работал, просто убедитесь, что ваше приложение Rails знает, что нужно подавать XML по запросу, с respond_to.

+0

Право - да, я уже знаю эту часть и благодарю вас за код :). Однако у меня нет этой роскоши, поскольку я работаю с XML-RPC для MetaWeblog, и я не могу сказать, что LiveWriter и Ecto меняют то, как они делают. Таким образом quandry. –

+0

ActiveResource говорит REST, он не играет в RPC-игру XML. Для XML RPC вам нужен клиент XML RPC. –

+0

У меня есть клиент - это LiveWriter и Echo - мне нужен сервер XML-RPC (таким образом, мой вопрос выше). Я копаю, что ActiveResource говорит REST ... как я упоминаю ... –

0

В этом случае я бы сохранил свой сайт/службу ActiveResource красивым, чистым и RESTful. Не трахайте его с помощью XML-RPC.

Вместо этого создайте прокси-службу, которая принимает XML-RPC с одной стороны и переводит запросы на ActiveResource на другом.

LiveWriter затем поговорит с ActiveResourceProxyService через XML-RPC, а ActiveResourceProxyService отбросит запросы ActiveResource в веб-приложение.

Похоже, вы внедряете простой API для ведения блогов, поэтому он не должен принимать слишком много кода.