2012-06-23 19 views
0

我有一個Rails應用程序,它可以通過HTML接口完成我需要的所有工作,現在我想要通過API提供對訪問某些功能的訪問。Rails使用指向現有控制器動作的路由實現API

我該如何選擇性地將某些API控制器操作轉發給使用Routes.rb的另一個控制器的操作?

我曾嘗試以下:

我經常控制器路線做工精細用:

match 'stuff' => 'stuff#index' 
get 'stuff/index' 
get 'stuff/some_get_action' 
post 'stuff/some_post_action' 

但後來當我嘗試了我的API:

match 'api' => 'api#index' 
match 'api/some_get_action' => 'stuff#some_get_action', :via => :get 
match 'api/some_post_action' => 'stuff#some_post_action', :via => :post 

或...

match 'api' => 'api#index' 
get 'api/some_get_action', :to => 'stuff#some_get_action' 
post 'api/some_post_action', :to => 'stuff#some_post_action' 

我ge錯誤。當我導航到/ api/index以服務於一個包含用於測試API URL的表單的HTML頁面時,url_for引發了一個'路由錯誤'異常,表示'無路由匹配...'。

+0

如果你想在你的應用上使用API​​,你應該堅持最佳實踐:引入版本控制,如app/v1併爲它創建不同的控制器。如果你堅持胖模型瘦身控制器的方法,這應該很容易做到。 –

回答

1

您可能希望包含':as =>'並定義您可能用作鏈接路徑的路由名稱。

get 'api/some_get_action' => 'stuff#some_get_action', :as => 'some_get_action' 

並且您的索引文件中的鏈接路徑將具有'some_get_action_path'。不確定'匹配'或'獲取'會自動解析爲路徑名,通過設置':as'它肯定會。

我喜歡你的想法,設置此頁面進行測試。我總是在控制檯上做,這肯定比單擊鏈接更困難。您的鏈接可能需要推斷出它們是:json請求,而不是:http。

+0

我正在使用<%url_for:controller =>'api',:action =>'some_get_action'%>。所以我不認爲它是_path幫助器方法的問題。 – KrisG

+0

也許你的意思是<%= url_for ..%>。不知道爲什麼它不工作。如果你確實改變了我的'get ...',那麼它也可能工作,並且更容易,因爲你只需要'link_to some_get_action_path'。 –

+0

感謝科爾,你的建議使用輔助方法工作(我沒有打擾:as)。這似乎是在url_for中的錯誤? 我期望它和_path幫助程序方法一樣,並且我更喜歡url_for,因爲它更清楚地指出了您指向哪個控制器/操作,而不是魔術路徑方法。 – KrisG

相關問題