2012-10-29 62 views
1

我正在尋找從其他網站獲取數據的代碼的「rails」設計模式。正確的軌道地方無數據獲取代碼

我的應用程序中有一個rails控制器,它不是從數據庫中獲取數據,而是從外部API獲取數據或從網上獲取數據。

哪裏有「rails」放置這段代碼的地方。爲了快速實現,我只是將它固定在模型中,但模型不與數據庫交互 - 或者支持標準模型功能 - 這樣感覺不對,但我對rails和ruby的理解還不牢固足以知道應該去哪裏。

方式代碼工作大概就是 控制器調用model.fetchData ARGS 該機型採用HTTParty或相似,使 其傳遞迴控制器

任何意見通話 處理數據?

回答

1

廣義地講,我認爲有兩種可能的方式來做到這一點:

  1. 創建一個純Ruby類以包含發出請求的API(S),並從中處理響應的方法(它們) 。您可以使用include HTTParty將HTTParty模塊包含在此類中。放置這段代碼的通常位置是在lib /中(確保無論放在哪裏,路徑都在autoload_paths之內)。
  2. 如果您做的任何事情非常複雜,或者API本身很複雜,您可能需要考慮創建一個單獨的gem來處理與API的交互。這種類型的寶石是一個「API包裝」 - 如果你環顧四周,你會看到有很多這樣的熱門服務(Twitter,LinkedIn,Flickr等)

注意我沒有提到activerecord。如果你不打算將任何東西保存到數據庫中,我不認爲甚至不需要創建任何主動記錄模型。你可以通過控制器和視圖來獲得,然後(如果需要)從activemodel中挑選組件(驗證,國際化等),使你的ruby API包裝類更像是一個Rails模型。例如,我在應用程序中所做的一件事就是在實際向外部API發出請求之前將查詢應用於查詢字符串,這有點像在查詢數據庫之前對數據庫查詢運行驗證。請參閱Yehuda Katz的this article瞭解更多關於如何使普通紅寶石物體感覺像主動記錄模型。

希望有所幫助。我昨天剛剛回答了另一個與此類似的問題,你可能也想看看這個答案:Using rails to consume web services/apis