使用rails来使用Web服务/ apis

时间:2012-10-28 23:31:33

标签: ruby-on-rails ruby service web httparty

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

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

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

1 个答案:

答案 0 :(得分:31)

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

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

  1. 了解Rails
  2. 了解如何在Ruby中与API交互(发出请求和解析响应)
  3. 这是两个不同的问题,虽然你可能最终将它们一起实现,但最好先考虑它们。

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

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

    E.g:

    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来实现这一点,这会将模块添加到类中。有很多关于如何执行此操作的示例here is one
    3. 使用专用gem访问特定API,或自己创建一个(或多个)。有最受欢迎服务的宝石,例如TwitterLinkedinFlickr等。有关详情,请参阅this list of API client gems。这消除了与API交互的许多痛苦,但只适用于所有服务的子集。
    4. 你提到你正在考虑使用HTTParty,我可以推荐,因为我自己使用它。还有其他选择,例如Faraday(有关详情,请参阅this list of HTTP clients),但我发现对于大多数任务,HTTParty都可以。文档可能有点稀疏,但您可以使用一堆examples

      希望有所帮助!