使用rails来使用Web服务/ apis

我是rails世界的新手,我正在尝试构建一个应用程序,只允许我根据用户输入在亚马逊和这些网站上搜索内容。

我做了一点研究,似乎httpartygem是一个很好的起点? 到目前为止我发现的文件并不是最好的。 他们并没有真正给我很多信息(在哪里放置代码等)。

是否有任何现有的教程或代码示例,我可以使用或看看,让我更好地了解这个东西是如何工作的?

我正在研究这样的应用程序,所以让我提出一些想法。

首先,如果你是Rails的完全新手,那么作为第一步,我建议采用并行方法解决问题,有两条轨道:

  1. 了解Rails
  2. 了解如何在Ruby中与API交互(发出请求和解析响应)

这是两个不同的问题,虽然您可能最终将它们一起实现,但最好先考虑它们。

对于第一个,我建议先写几个简单的应用程序,以了解事情的运作方式。 即使只有一个简单的应用程序也需要一定量的用户交互,可能会将数据保存到数据库等等,这些问题与从API中消费数据是分开的。 Rails上有无数的教程,但仅举一例,您可以尝试使用Michael Harti的Rails学习Web开发作为起点。

第二点,消费API数据,不同于设计应用程序本身的问题。 要了解有关问题这一方面的更多信息,我建议使用一个流行的API客户端gem(如你所提到的) HTTParty ,我自己使用它。 而不是立即尝试在Rails应用程序中使用HTTParty方法,作为练习我建议在控制台(irb)中稍微玩一下。 如果您安装gem( gem install httparty ),则可以从控制台请求它( require 'httparty' )并立即发出请求并解析来自API的响应。

例如:

 irb(main):001:0> require 'httparty' => true irb(main):002:0> response = HTTParty.get('http://twitter.com/statuses/public_timeline.json') => ... 

一旦你对Rails更熟悉并且访问ruby中的API,那么你可以继续实际构建应用程序本身。 根据您对API的请求的复杂程度,您可以选择如何在Rails应用程序中构建API请求:

  1. 直接从控制器操作使请求成为Rails应用程序本身的一部分。 如果您只在有限数量的服务上支持非常有限数量的请求类型(例如简单搜索),这实际上是可以的。 任何更复杂的东西,你的控制器都会变胖,这在MVC框架中是禁止的。
  2. 创建一个单独的ruby类(通常称为API包装器),将用于发出请求和解析响应的方法组合在一起。 使用像HTTParty这样的gem,你可以通过在类中添加一行include HTTParty来实现这一点,它将模块添加到类中。 关于如何做到这一点有很多例子, 这里有一个 。
  3. 使用专用gem访问特定API,或自己创建一个(或多个)。 有大多数流行服务的gem,例如Twitter , Linkedin , Flickr等。请参阅此API客户端gem列表以获取更多信息。 这消除了与API交互的许多痛苦,但仅适用于所有服务的子集。

你提到你正在考虑使用HTTParty,我可以推荐,因为我自己使用它。 有法拉第等替代方案(请参阅此HTTP客户端列表以获取更多信息),但我发现大多数任务都是HTTParty会做得很好。 文档可能有点稀疏,但您可以使用一些示例 。

希望有所帮助!