2009-07-01 3 views
4

비 REST API를 사용하는 클라이언트를 작성합니다 (예 : site/gettreasurehunts 가져 오기). 리소스 (예 : 리소스 ID)를 모두 지정해야합니다. 요청의 HTTP 본문을 사용자 정의 XML 문서로 만듭니다. Rails와 ActiveResource를 사용하고 싶습니다만, 거의 모든 ActiveResource의 메소드를 다시 작성해야합니다.레일즈에서 ActiveResource를 사용하여 비 REST API를 사용합니다.

다른 (Ruby) 프레임 워크를 사용해도 동일한 결과를 얻을 수있는보다 세련된 방법이 있습니까? 난 그냥 사용 이러한 경우에, ActiveResource이 할 수있는 방법이라고 생각하지 않습니다

답변

3

순 :: HTTP 및 노코 기리

3

나는 그것이 매우 유연하고 내가 할 수있는 확신, HTTParty를 추천 할 것입니다 당신이 필요로하는 것을 다루는 것. 프로젝트의

몇 가지 예 :

pp HTTParty.get('http://whoismyrepresentative.com/whoismyrep.php?zip=46544') 
pp HTTParty.get('http://whoismyrepresentative.com/whoismyrep.php', :query => {:zip => 46544}) 

@auth = {:username => u, :password => p} 
options = { :query => {:status => text}, :basic_auth => @auth } 
HTTParty.post('http://www.twitter.com/statuses/update.json', options) 

그리고 당신은 요청의 본문에 뭔가를 게시해야하는 경우, 단순히 추가 옵션 해시에 몸 => "텍스트"를.

함께 작업하는 것이 매우 간단하며 현재 Rails 응용 프로그램에서 일부 REST 서비스를 사용하기 위해 ActiveResource 대신 사용하고 있습니다.

+0

: 여기

는 맛있는 API에 대한 예입니다 : : 대신 HTTP. 어쨌든 답장을 보내 주셔서 감사합니다! – asymmetric

1

간단한 답변입니다. 나는 ActiveResource와 비슷한 문제가 있었고, HTTParty의 api (너무 많은 클래스 메소드)가 마음에 들지 않았다. 그래서 나는 내 자신을 굴렸다. 사용해보십시오. Wrest입니다. Curl을 부분적으로 지원하고 REXML, LibXML, Nokogiri 및 JDom을 통해 즉시 deserialisation합니다. 사소하게도 자신의 디시리얼라이저를 작성할 수 있습니다. 나는 그것이 정말 불쾌한 버그 (자세한 내용은 내 질문에 봐)가 발견, 내가 인터넷으로 이동하기로 결정했습니다, HTTParty을 시도한 후

class Delicious 
    def initialize(options) 
    @uri = "https://api.del.icio.us/v1/posts".to_uri(options) 
    end 

    def bookmarks(parameters = {}) 
    @uri['/get'].get(parameters) 
    end 

    def recent(parameters = {}) 
    @uri['/recent'].get(parameters) 
    end 

    def bookmark(parameters) 
    @uri['/add'].post_form(parameters) 
    end 

    def delete(parameters) 
    @uri['/delete'].delete(parameters) 
    end 
end 

account = Delicious.new :username => 'kaiwren', :password => 'fupupp1es' 
account.bookmark(
    :url => 'http://blog.sidu.in/search/label/ruby', 
    :description => 'The Ruby related posts on my blog!', 
    :extended => "All posts tagged with 'ruby'", 
    :tags => 'ruby hacking' 
) 
관련 문제