2009-12-27 2 views
3

ActionWebService와 XMLRPC에서 많은 예제를 보았습니다.하지만 3 년이되었고, 내가 알고있는 것으로부터, ActiveResource는 ActionWebService를 대체하기로되어 있습니다.레일스 용 ActiveResource 및 XMLRPC의 사용 예가 있습니까?

ActiveResource가 XML을 사용하여 다른 웹 사이트와 "대화"하고 모델 정보를 소비하는 방법을 잘 알고 있지만 XML-RPC는 원하는 방식의 이름을 전달하는 전혀 다른 유형입니다. 실행 및 요청이 전달됩니다.

EDIT - ActiveResource가 작동하는 방법을 알고 있습니다.하지만 정의 된 API (MetaWeblogAPI)로 XML-RPC를 사용해야하는 클라이언트 응용 프로그램이 있으며 선택의 여지가 없습니다. 그러나 그것을 구현하기 위해서는 손이 묶여 있어야합니다.

그래서 구체적으로 : 저는 ActiveResource를 사용하여 XML-RPC를 레일즈에서 구현하는 방법에 대한 문서 나 글을 찾으려고했습니다. 아마도 그렇게 할 수 없습니다 - 나는 너무 많이 알고 싶습니다. 간단히 "작은 도약"을 놓치고있는 중입니다. "어떻게 메소드에 요청을 건네 줘야합니까?"부분에서 XML-RPC 요청에서 메소드 이름을 가져 와서 메소드에 넘깁니다. 나는 이것을 overthinking 오전 알아요. 그것을 도울 수 없다 - 나는 .NET 사람이다. :).

"작동하는 것을 사용하려고했습니다"- ActionWebService를 구현하려했지만 계속해서 내가 설치 한 레일즈 2.3.5와 잘 작동하지 않는 것 같습니다. 설치되어있는 ActionWebService를 가리키는 "알 수없는 상수"오류가 발생합니다 (레일스 2.x는 그것을 좋아하지 않습니다).

나는 조금은 n00b이기 때문에 친절해라. :) - 아마도 이것이 내가 만들어내는 것보다 훨씬 쉽다는 것을 확신한다.

답변

2

생각보다 훨씬 쉽게입니다. Rails를 사용하여 XMLRPC를 수행 할 필요가 없습니다. 요청이있을 때 Rails 응용 프로그램에 XML을 제공 할 수 있으며 .xml 요청을 처리하는 방법을 지시하는 한 모든 URL에 .xml을 추가하기 만하면 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이 필요 호출하지가 그냥 URL에 .XML을 추가하고 레일은 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 

그런 짓을 내장, 당신은 등 TrackResource.exists?(34)track = TrackResource.new(:name => "Track Name"); track.save

로 통화를 할 수있는 제공 API 레일

Here's the documentation on ActiveResource. ActiveResource가 작동하려면 레일스 앱이 요청시 XML을 제공하는지 확인하십시오 (respond_to).

+0

오른쪽 - 나는이 부분을 이미 알고 있으며 코드에 감사드립니다. :) 그러나 MetaWeblog 용 XML-RPC로 작업하면서이 고급 스러움이 없습니다. LiveWriter와 Ecto에게 일을하는 방식을 바꾸라고 말할 수는 없습니다. 따라서 quandry. –

+0

ActiveResource는 REST를 말하고 XML RPC 게임을 실행하지 않습니다. XML RPC의 경우 XML RPC 클라이언트가 필요합니다. –

+0

클라이언트가 있습니다. LiveWriter와 Echo입니다. XML-RPC 서버가 필요합니다 (위의 질문에 대한 답). 나는 ActiveResource가 REST를 말하는 것을 파헤 쳤다. 내가 언급했듯이 ... –

0

이 경우에는 내 ActiveResource 사이트/서비스를 깨끗하고 안정적으로 유지합니다. XML-RPC를 사용하지 마십시오.

대신 한 쪽에서 XML-RPC를 허용하고 다른 쪽에서 요청을 ActiveResource로 변환하는 프록시 서비스를 만듭니다.

LiveWriter는 XML-RPC를 통해 ActiveResourceProxyService와 통신하고 ActiveResourceProxyService는 ActiveResource 요청을 웹 응용 프로그램으로 되돌립니다.

간단한 블로깅 API를 구현하는 것처럼 들리므로 너무 많은 코드를 사용해서는 안됩니다.

관련 문제