2009-07-01 5 views
4

REST API以外のAPI(つまりGET site.com/gettreasurehunts)を使用するクライアントを作成しています。これは、リソース内のすべてのパラメータ(リソースIDさえも)を指定する必要があります。要求のHTTP本体をカスタムXML文書として作成します。 RailsとActiveResourceを使いたいのですが、ActiveResourceのメソッドのほとんどすべてを書き直さなければなりません。RESTで非REST APIをActiveResourceで消費する

他の(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) 

そして、あなたはリクエストのボディに何かを投稿する必要がある場合は、単に追加:ボディ=>「テキスト」をオプションハッシュへ。

これは非常に簡単です。私は現在、ActiveResourceの代わりにこれを使用して、RailsアプリケーションからいくつかのRESTサービスを消費しています。

+0

HTTPartyを試した後、私はそれはいくつかの本当に厄介なバグを(より多くの情報のための私の質問を見て)持っていた、と私はネットで行くことに決めました。 :代わりにHTTP。とにかく返信のおかげで! – asymmetric

1

かんたん回答、しないでください。私はActiveResourceに似た問題を抱えていましたが、HTTPartyのapi(あまりにも多くのクラスメソッド)が嫌いでした。試してみてください。それはWrestです。 REXML、LibXML、Nokogiri、JDomを使用して、Curlと非直列化を部分的にサポートしています。自明に独自のデシリアライザも作成できます。ここで

がおいしいAPIの例です:

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' 
)