【问题标题】:API subdomain for Heroku app, is it possible?Heroku 应用程序的 API 子域,可以吗?
【发布时间】:2013-03-01 14:39:50
【问题描述】:

我正在尝试构建一个 API,但我担心我的所有资源要么无法通过 api.myapp.com 域访问,要么会“使用”错误的 uri。

我已经为我的域名添加了 CNAME 以指向我的 Heroku 应用程序。 (例如:浏览 www.myapp.com 会将您带到https://myherokuapp.heroku.com

我想设置一个 API 子域,以便 GET 到 https://api.myapp.com 带你到https://myherokuapp.heroku.com/api/v1

最好的情况是发送到 https://api.myapp.com/accounts/12345 的 POST 会创建一个新帐户。这可能吗?

(我知道 Heroku 无法使用子域(例如:mysubdomain.myappname.heroku.com))

我相信答案可能在三个不同的地方:

  1. 与 DNS 提供商转发配置有关(也许 与“A”记录有关)。
  2. 在 Heroku 中配置的东西,可能是用于处理域/子域的付费插件。
  3. 处理我的应用程序中的所有子域。

【问题讨论】:

  • 嘿@Scott 我正在尝试做同样的事情,但 Heroku 和 GoDaddy - 似乎无法让它们工作。您能否发布对上述解决方案的答案:即您的路线文件?这对于查看您的答案的 1500 人来说非常方便。
  • @BKSpureon 自从我问这个问题以来已经差不多 4 年前了;)但是,答案在下面的 cmets 中: 1. 将 CNAME(Alias) api.myapp.com 添加到我的 DNS ,并让它指向 myherokuapp.heroku.com 2. 将域 api.myapp.com 添加到 Heroku。 3. 在您的节点应用程序中使用一个模块来处理子域路由。我使用npmjs.com/package/express-subdomain 将所有 api 子域流量路由到位于 myherokuapp.heroku.com/api/v1 的 API 端点。从那时起,我在 Digital Ocean 有一个 DIY 服务器(5 美元/月),甚至在使用应用程序之前就使用 Nginx 进行路由。

标签: api rest heroku subdomain


【解决方案1】:

如果您想区分 api.mydomain.com 和 www.mydomain.com 并为您的 API 请求使用不同的控制器,那么您当然可以使用受限于您的 api 子域的 Rails 路由来处理此问题

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 Gem 以帮助构建您的 api

【讨论】:

  • 有趣的方法,虽然我使用的是 Node.js,但想法是一样的。所以你建议我的应用程序可以处理所有传入的子域请求。我可以使用我的 DNS 提供商的 DNS 转发,并将类似“myapp.com”的内容转发到“myherokuapp.heroku.com/api/v1”,但我不知道如何将其转发“api.myapp.com”到“api.myherokuapp.heroku.com”我不知道'认为这是不可能的,对 api.myapp.com 的任何点击都会导致地址栏发生变化......并且我的 URI 将与 heroku 的应用程序名称相关联。任何想法如何解决这个问题?
  • 您可以在 Heroku 应用程序上拥有多个域,例如 api.mydomain.com 和 www.mydomain.com - 您可以将这两个 CNAME 到 myapp.herokuapp.com,然后通过将它们添加为自定义域heroku 控制面板。您不会看到地址栏发生变化,即,如果访问者点击 api.myapp.com,它将保持不变,而 www.myapp.com 将保持不变。一旦进入您的应用程序,您只需根据您正在编码的任何语言请求的子域来处理请求。
  • 您对 CNAME 的建议正是我所需要的。该 URL 现在可以是 api.myapp.com 并且它重定向到 myherokuapp.heroku.com 而不更改 URL。所以总而言之,我必须: 1. 将 CNAME(Alias) api.myapp.com 添加到我的 DNS,并让它指向 myherokuapp.heroku.com 2. 将域 api.myapp.com 添加到 Heroku。 3. 在我的应用中使用一个模块来处理子域。
  • @praveena_kd 是的,我必须将 CNAME(别名)添加到我的域提供商和 Heroku。任何访问 api.myapp.com 的人都会被重定向(地址栏中的 URL 不变)到 myherokuapp.heroku.com/api/ 所以当我转到“api.myapp.com/myRESTresource”时,它实际上会被定向到 myherokuapp.heroku。 com/api/myRESTresource
  • @Scott Hi Scott,您使用哪个模块来处理子域?
猜你喜欢
  • 2017-08-13
  • 1970-01-01
  • 2013-10-18
  • 2017-09-01
  • 2014-08-25
  • 2013-11-03
  • 2014-01-02
  • 1970-01-01
  • 2012-11-22
相关资源
最近更新 更多