当前位置:  开发笔记 > 后端 > 正文

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

如何解决《在另一个域上使用RESTfulWeb服务的正确"Rails方式"是什么?》经验,为你挑选了3个好方法。

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

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"的方法来做到这一点.有最佳实践方法还是这是最好的方法?



1> Kyle Boon..:

我有一个名为HTTParty的插件/ gem用于几个项目.

http://johnnunemaker.com/httparty/

HTTParty允许您轻松使用任何Web服务并将结果解析为哈希.然后,您可以使用散列本身或使用结果实例化一个或多个模型实例.我已经做到了两个方面.

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

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

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


rails core没有内置任何东西.模型只是一个类 - 只需在models目录中创建一个类,而不是从ActiveRecord:Base类继承.您不会包含任何AR优点,但这是在rails应用程序中使用Web服务的一种非常常见的模式
我现在开始使用restclient来处理这类东西,因为HTTParty变得陈旧,并且restclient更容易使用.

2> Ethan Heilma..:

Restclient是解决这个问题的一个非常好的解决方案.

require 'rest_client'
RestClient.get 'http://example.com/resource'
RestClient.get 'http://example.com/resource', {:params => {:id => 50, 'foo' => 'bar'}}

从自述.



3> Adam Alexand..:

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


实际上,不必使用Rails for ActiveResource来创建远程RESTful服务.底层实现并不重要.
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有