首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在另一个域上使用RESTful web服务的正确"Rails方式“是什么?

在另一个域上使用RESTful web服务的正确"Rails方式“是什么?
EN

Stack Overflow用户
提问于 2009-04-14 17:31:02
回答 5查看 46.7K关注 0票数 55

我想编写一个使用RESTful web服务API的Ruby on Rails应用程序,对结果执行一些逻辑,然后在我的视图上显示这些数据。例如,假设我想要编写一个在search.twitter.com上进行搜索的程序。使用纯ruby,我可以创建以下方法:

代码语言:javascript
复制
def run(search_term='', last_id=0)
  @results = []
  url = URI.parse("http://search.twitter.com")
  res = Net::HTTP.start(url.host, url.port) do |http|
    http.get("/search.json?q=#{search_term}&since_id=#{last_id.to_s}")
  end
  @results = JSON.parse res.body
end

我很想把这个方法作为一个私有方法放到我的Rails控制器中,但我总觉得有一种更好、更"Rails“的方法可以做到这一点。有没有一种最佳实践方法,或者这真的是最好的方法?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-04-14 17:42:56

有一个名为HTTParty的插件/gem,我已经在几个项目中使用过它。

http://johnnunemaker.com/httparty/

HTTParty允许您轻松地使用任何web服务,并为您将结果解析为散列。然后,您可以使用散列本身,或者使用结果实例化一个或多个模型实例。我用两种方法都做到了。

对于twitter示例,您的代码将如下所示:

代码语言:javascript
复制
class Twitter
  include HTTParty
  base_uri 'twitter.com'

  def initialize(u, p)
    @auth = {:username => u, :password => p}
  end

  # which can be :friends, :user or :public
  # options[:query] can be things like since, since_id, count, etc.
  def timeline(which=:friends, options={})
    options.merge!({:basic_auth => @auth})
    self.class.get("/statuses/#{which}_timeline.json", options)
  end

  def post(text)
    options = { :query => {:status => text}, :basic_auth => @auth }
    self.class.post('/statuses/update.json', options)
  end
end

# usage examples.
twitter = Twitter.new('username', 'password')
twitter.post("It's an HTTParty and everyone is invited!")
twitter.timeline(:friends, :query => {:since_id => 868482746})
twitter.timeline(:friends, :query => 'since_id=868482746')

最后一点,您也可以使用上面的代码,但一定要将代码包含在模型中,而不是控制器中。

票数 54
EN

Stack Overflow用户

发布于 2012-09-29 01:57:36

对于这个问题,Restclient是一个非常好的解决方案。

代码语言:javascript
复制
require 'rest_client'
RestClient.get 'http://example.com/resource'
RestClient.get 'http://example.com/resource', {:params => {:id => 50, 'foo' => 'bar'}}

来自readme的。

票数 27
EN

Stack Overflow用户

发布于 2009-04-14 17:39:21

如果远程RESTful web服务也是使用Ruby on Rails创建的,那么ActiveResource就是最佳选择。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/748614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档