2013-03-01 56 views
7

我正在嘗試構建一個API,我擔心我的所有資源將無法通過api.myapp.com域訪問,或者他們將「以錯誤的uris」活動。Heroku應用程序的API子域名,有可能嗎?

我已經添加了我的域名的CNAME指向我的Heroku應用程序。 (例如:瀏覽到www.myapp.com帶你到https://myherokuapp.heroku.com

我想建立一個API子域,使A到 https://api.myapp.com帶你到https://myherokuapp.heroku.com/api/v1

的最好的方案將是一個POST到https://api.myapp.com/accounts/12345將創建一個新的帳戶。這甚至有可能嗎?

(我知道,子域(如:mysubdomain.myappname.heroku.com)是不可能的Heroku的)

我相信答案可以在三個不同的地方:

  1. 事做與DNS提供商轉發配置(可能 與「A」記錄有關)。
  2. 在Heroku中進行配置的東西,可能是一個付費插件來處理域名/子域名。
  3. 處理我的應用程序中的所有子域。
+0

嘿@Scott我試圖做到這一點完全一樣的事情,但Heroku的和GoDaddy的 - 似乎無法讓他們的工作。你會發布你的答案上述解決方案:即你的路線文件?這對於那些已經查看了你的答案的1500人來說非常方便。 – BKSpurgeon 2017-01-14 03:49:45

+0

@BKSpurgeon這是近4年前,因爲我問這個問題;)但是,是的,答案是在下面的意見: 1.添加CNAME(別名)api.myapp.com我的DNS,並將其點到myherokuapp.heroku.com 2.將域api.myapp.com添加到Heroku。 3.在節點應用程序中使用模塊來處理子域路由。我使用https://www.npmjs.com/package/express-subdomain將所有api子域流量路由到myherokuapp.heroku.com/api/v1的API端點。 從那時起,我在數字海洋($ 5 /月)一個DIY服務器,甚至擊中應用之前做Nginx的路由。 – Scott 2017-01-15 19:04:23

回答

2

如果你想之間api.mydomain.com和www.mydomain.com,並有不同的控制器的API請求,那麼你當然可以使用Rails的路線限制爲您的API子域來處理這個

constraints :subdomain => "api" do 
    scope :module => "api", :as => "api" do 
    resources :posts 
    end 
end 
分化

然後它將使用應用程序的app/controllers/api文件夾中的posts_controller.rb。

然後,您將同時爲www.mydomain.com和api.mydomain.com爲您的應用程序添加一個自定義域,然後路由將負責其餘部分。

您可能還需要尋找到了Grape寶石幫助建立您的API

+0

有趣的做法,雖然我使用Node.js的想法是相同的。所以你建議我的應用程序可以處理所有傳入的子域請求。我可以使用DNS轉發從我的DNS提供商,並轉發類似「https://myapp.com」到「https://myherokuapp.heroku.com/api/v1」,但我看不出如何使它將「https://api.myapp.com」轉發給「https://api.myherokuapp」。heroku.com「我不認爲這是可能的,任何命中api.myapp.com將導致地址欄更改...我的URI將被綁定到heroku的應用程序名稱任何想法如何解決這個問題? – Scott 2013-03-04 03:15:52

+2

您可以在一個heroku應用程序上有多個域名,例如api.mydomain.com和www.mydomain.com - 您可以將這兩個域名都記錄到myapp.herokuapp.com,然後通過heroku控制面板將它們添加爲自定義域名。不會看到地址欄的變化,也就是說,如果訪問者訪問api.myapp.com,它將保持原樣,www.myapp.com將保持原樣。一旦在您的應用程序中,您只需根據請求的子域處理請求 – 2013-03-04 08:34:45

+1

您對CNAME的建議是我所需要的,URL現在可以是api.myapp.com,它會重定向到myherokuapp.heroku.com而不會改變URL。所以總之,我不得不: 1.將CNAME(別名)api.myapp.com添加到我的DNS,並讓我t指向myherokuapp.heroku.com 2.將域api.myapp.com添加到Heroku。 3.在我的應用程序中使用一個模塊來處理子域。 – Scott 2013-03-18 15:37:02

相關問題