我現在的Rails應用程序具有以下子域:分期子域時,應用程序已經有子域
ui.myapp.com
api.myapp.com
我想成立一個臨時的環境,我想知道什麼是爲了設置域最好的辦法。
通常情況下,我會做:
staging.myapp.com
但後來,我怎麼訪問UI/API的網站嗎?
它是 'OK' 的事:
ui.staging.myapp.com
api.staging.myapp.com
?
我現在的Rails應用程序具有以下子域:分期子域時,應用程序已經有子域
ui.myapp.com
api.myapp.com
我想成立一個臨時的環境,我想知道什麼是爲了設置域最好的辦法。
通常情況下,我會做:
staging.myapp.com
但後來,我怎麼訪問UI/API的網站嗎?
它是 'OK' 的事:
ui.staging.myapp.com
api.staging.myapp.com
?
假設: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和普通網站。但是使用請求格式可以區分功能。
我希望這能回答你的問題。如果您仍有任何疑問,請隨時提問。
對於簡單的情況,這可能是一個很好的解決方案。但是在大多數設置中,需要將web和api控制器分開,因爲邏輯幾乎總是有點不同,並且您想對API進行版本控制。 – 2014-09-24 17:54:07
@MartinPoulsen是的,我同意,你可能需要單獨的控制器,但仍然可以有相同的子域。您可以使用一些gem來維護API相關的控制器代碼。關於版本化的API,您可以使用staging.myapp.com/v2/users等參數傳遞版本。 – Allerin 2014-09-24 18:04:17
是的,這應該是完美的。你有什麼擔憂? Cookie問題? – 2014-09-24 17:48:48
Martin Poulsen,我很擔心SSL證書的子域不會超過一級... – 2014-09-24 19:29:27