2015-11-19 65 views
2

我有興趣將API添加到現有的Rails應用程序。我希望Application控制器繼承ActionController :: Base和Api Controller從ActionController :: API繼承,以便在API端點上不存在不需要的中間件具有兩個不同基礎(基礎和API)的Rails應用程序

我可以添加rails-api gem(我是鎖定在導軌4.2上),並根據需要調整包裝參數初始值設定項,但是當發生這種情況時,我的導航應用程序中會話ID的記錄會中斷。

是否有使用兩個護欄及護欄-API問題?一個導軌應用程序可以有兩個不同的基地?

爲了討論起見,假設我不能只是做一個獨立的Rails的API應用程序,並拉出業務邏輯到寶石。

編輯:

我們有什麼:

ActionController::Base 
    \ ApplicationController 
     \ RailsControllers 
    \ ApiController 
     \ RailsAPIControllers 

我們想什麼:

ActionController::Base 
    \ ApplicationController 
     \ RailsControllers 
ActionController::API 
    \ ApiController 
     \ RailsAPIControllers 

我不知道是否有任何實際的區別,如果基本的ActionController必須是儘管在某些時候加載。這個想法是,如果從API ActionController繼承,那麼RailAPIController會更輕,但這樣做會導致問題。

回答

1

彌敦道,

最好的辦法是建立一個ApiController您所有的API端點從繼承只呈現JSON,並採取所有的會話/ AUTH東西照顧。那麼你將不必擔心支持這兩個寶石的任何奇怪。

對於你很可能希望從ActionController的:: Base的繼承,除非你的會話/前在API操作的東西會模仿軌http請求的API。如果後者是從ApplicationController繼承的情況。

+0

看到我上面的修改。無論我們想要一個ApiController。問題是你從哪裏繼承。 –

+0

查看上面添加的評論 – Austio

0

我在同一條船上其實是,現在,作爲「練習」我要創建一個Rails引擎的所有API邏輯/路由/串行器/規格等,從我們的主應用程序分開。我真的只是想借口嘗試引擎...

我纔剛剛起步,但也有一些明顯的優勢,我看已經對僅僅有我的控制器和串行不同的命名空間的缺點。

的優點包括隔離依賴(因爲它本質上是一個寶石),單獨的測試,很好的路由(在主應用程序的安裝路徑路由),並內置在命名空間所涉及的一切。

到目前爲止,我遇到的缺點是重複。就目前而言,我需要工廠來滿足我的規格要求,但是我還沒有找到從父應用程序中使用工廠的理想方法。目前,我只是在引擎中重新創建了我需要的工廠。我相信有更好的辦法,我還沒有弄明白。