2014-09-24 35 views
0

我現在的Rails應用程序具有以下子域:分期子域時,應用程序已經有子域

ui.myapp.com 
api.myapp.com 

我想成立一​​個臨時的環境,我想知道什麼是爲了設置域最好的辦法。

通常情況下,我會做:

staging.myapp.com 

但後來,我怎麼訪問UI/API的網站嗎?

它是 'OK' 的事:

ui.staging.myapp.com 
api.staging.myapp.com 

+0

是的,這應該是完美的。你有什麼擔憂? Cookie問題? – 2014-09-24 17:48:48

+0

Martin Poulsen,我很擔心SSL證書的子域不會超過一級... – 2014-09-24 19:29:27

回答

0

假設:API調用的輸出預期採用JSON格式。

對於像api.staging.myapp.com這樣的功能,不建議使用單獨的子域。您可以始終使用相同的URL用於Web應用程序和API 更好的方法是使用Rails應用程序中的相同控制器操作,但返回JSON輸出哈希值。

例如獲得用戶,你將不得不在users_controller.rb一些代碼

class UsersController < ApplicationController 
    def index 
    @users = User.all 
    respond_to do |format| 
     format.html do 
     render :index 
     end 
     format.json do 
     render :json => {:users => @users} 
     end 
    end 
    end 
end 

現在,這裏如果請求是HTML時,它會生成HTML頁面否則它會返回JSON響應。

staging.myapp.com/users將爲您顯示web應用程序的html頁面,顯示用戶集合,staging.myapp.com/users.json將爲您提供用戶集合的json響應哈希。

所以,你不需要不同的子域來區分api和普通網站。但是使用請求格式可以區分功能。

我希望這能回答你的問題。如果您仍有任何疑問,請隨時提問。

+1

對於簡單的情況,這可能是一個很好的解決方案。但是在大多數設置中,需要將web和api控制器分開,因爲邏輯幾乎總是有點不同,並且您想對API進行版本控制。 – 2014-09-24 17:54:07

+0

@MartinPoulsen是的,我同意,你可能需要單獨的控制器,但仍然可以有相同的子域。您可以使用一些gem來維護API相關的控制器代碼。關於版本化的API,您可以使用staging.myapp.com/v2/users等參數傳遞版本。 – Allerin 2014-09-24 18:04:17