使用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请求。