使用Rails(HTTP请求)连接到Web服务?

我正在使用Ruby on Rails 3,我正在尝试实现API以从Web服务检索帐户信息。 也就是说,我想连接到具有Account类的Web服务,并从URI http:///accounts/1路由的show action获取信息。

这时,在web服务accounts_controller.rb文件中,我有:

 class AccountsController  @account.to_json } end end end 

现在我需要一些建议来连接到Web服务。 在客户端应用程序中,我应该有一个HTTP GET请求,但我的问题是:连接到发出HTTP请求的Web服务的“最佳”方法是什么?

客户端应用程序中的此代码有效:

 url = URI.parse('http:///accounts/1.json') req = Net::HTTP::Get.new(url.path) res = Net::HTTP.start(url.host, url.port) {|http| http.request(req) } @output = JSON(res.body)["account"] 

但是,上面的代码是“实现API的方式”吗?

是否可以使用第三方插件和gem?

是的,因为您使用的是RESTful路由,所以它们是您的基本API。 您还可以返回应用程序可轻松使用的结构化JSON数据。

还有其他方法可以实现Web服务API(例如SOAP ),但这是一种很好的方法。

由于它是一个Web服务API,连接到正确的URL并解析响应是客户端的方法。 虽然如果您需要访问许多不同的资源,创建一个灵活的构建请求URL的方法可能是个好主意。

如果您不需要Net :: HTTP提供的低级调整function,那么请看一下使用Ruby附带的Open-URI 。 它可以轻松地请求页面并接收身体。 Open-URI并没有所有的花里胡哨,但是对于我所做的很多事情来说,这是非常好的。

一个简单的用法看起来像:

 require 'open-uri' body = open('http://www.example.com').read 

文档还有很多其他的例子。

这些是我喜欢的其他HTTP客户端:

  • 了HTTPClient
  • 百头巨怪

它们更具可调性,如果您需要,它可以同时处理多个连接。 例如,Typhoeus有一套简化的调用,类似于Open-URI。 来自文档:

 response = Typhoeus::Request.get("http://www.pauldix.net") response = Typhoeus::Request.head("http://www.pauldix.net") response = Typhoeus::Request.put("http://localhost:3000/posts/1", :body => "whoo, a body") response = Typhoeus::Request.post("http://localhost:3000/posts", :params => {:title => "test post", :content => "this is my test"}) response = Typhoeus::Request.delete("http://localhost:3000/posts/1") 

HTTPClient也有类似的缩短方法。

在大多数情况下,我建议使用Rails的ActiveResource 。 没错 , httparty 。

如果您只需要一种简单的方法来获取基于rest的资源,我会使用ActiveResource。 它已经包含在rails中并且设置起来非常简单。 您只需在ActiveResource子类中指定基本URL和资源名称,然后就可以使用类似于ActiveRecord的接口来CRUD基于rest的资源。

rest-client是最容易连接到RESTful Web服务的最受欢迎的gem

我认为最好的解决方案之一是她的gem 。 它封装了提供具有活动记录行为的对象的restful请求。