2012-10-28 33 views
14

我剛剛接觸rails世界,並且正在嘗試構建一個應用程序,以允許我根據用戶輸入在Amazon和此類網站上搜索內容。使用rails來使用web服務/ apis

我已經做了一些研究,看起來httparty gem是一個很好的開始?目前發現的文件雖然不是最好的。他們並沒有真正給我提供很多信息(在哪裏放置代碼等)。

是否有任何現有的教程或代碼示例,我可以使用或看看給我一個這個東西如何工作的更好的想法?

+0

開始的最佳地點是首先學習Rails和MVC以及進入模型,視圖和控制器的內容。在你掌握了這些之後,這個問題的答案對你來說應該很容易。 –

回答

29

我正在研究這樣一個應用程序,所以讓我提供一些想法。

首先,如果你是一個完整的初來乍到Rails的,那麼作爲第一步,我建議採取並行的方法解決問題,有兩條軌道:

  1. 瞭解Rails的
  2. 瞭解有關如何使用API​​在Ruby中

互動(發出請求和解析響應)這是兩個不同的問題,雖然你可能最終實現它們放在一起,最好先想想他們隔離。

對於第一個,我建議先寫幾個簡單的應用程序,以瞭解事情的工作方式。即使只有一個簡單的應用程序也需要一定量的用戶交互,可能會將記錄保存到數據庫等,這些問題與從API中消耗數據分開。在Rails上有無數的教程,但只要提一個,你可以嘗試Michael Harti的Learn Web Development with Rails作爲起點。

第二點,使用API​​數據與設計應用程序本身的問題截然不同。要了解更多關於這個問題的方面,我建議使用一個受歡迎的API客戶端寶石,如我所使用的(如你所提到的)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和與訪問紅寶石的API,那麼你可以移動到實際構建應用程序本身。根據您對API的請求的複雜程度,您可以選擇如何在Rails應用程序中構建API請求:

  1. 使請求成爲Rails應用程序本身的一部分,直接來自控制器操作。如果您只支持數量有限的請求類型(例如簡單搜索),那麼這種情況確實沒有問題。任何更復雜的事情,你的控制器都會變胖,這在MVC框架中是不可能的。
  2. 創建一個單獨的ruby類(通常稱爲API包裝器),將用於發出請求和解析來自API的響應的方法分組在一起。有了像HTTParty這樣的寶石,只需在類中添加一行include HTTParty即可完成此操作,該類將模塊添加到類中。有很多關於如何做到這一點的例子,here is one
  3. 使用專用的gem來訪問特定的API,或自己創建一個(或多個)。大多數熱門服務都有寶石,例如Twitter,Linkedin,Flickr等。有關更多信息,請參見this list of API client gems。這消除了與API交互的很多痛苦,但只適用於所有服務的一部分。

你提到你正在考慮使用HTTParty,我可以推薦,因爲我自己使用它。有其他選擇,如Faraday(更多請參閱this list of HTTP clients),但我發現對於大多數任務,HTTParty將會很好。文檔可能有點稀疏,但有一堆你可以從中工作的examples

希望有幫助!

+0

完美!謝謝! – Keva161