App Engine:拥有Web模块和端点模块

时间:2015-03-24 08:27:01

标签: java google-app-engine

我想拥有一个网络和一个端点模块。

我在我的开发环境中工作很大程度上遵循https://github.com/GoogleCloudPlatform/appengine-modules-sample-java

然而,当我在app引擎中托管时,我无法正常工作。如果我将Web模块设为默认模块,则无法通过dispatch.xml路由到端点模块。这是因为端点(显然)需要位于/ _ah / api,并且无法将其从默认模块中路由出来。

另一个选择是将端点模块作为默认模块,但是我不知道如何将除/ _ah / api /之外的所有内容路由到Web模块。您似乎无法路由/ *远离默认模块。

编辑:注意我想让两个模块都运行在同一个自定义域中。

EDIT2:请注意,这是单页应用。前端模块纯粹是html,css和js,我想与同一域上的端点模块进行通信。

有什么方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

如果问题仅存在于路由中,您肯定可以使用带端点的默认模块和前端的模块'

然后您的调度文件看起来应该是这样的(python版本,Java应该非常相似):

dispatch: 
- url: "*/_ah/*"
  module: default
- url: "*/*"
  module: website

调度文件显然将路由设置为从上到下的优先级,因此每个针对端点* * _ ah / *的请求都将路由到默认模块,其余的将发送到网站模块。

但是,如果您遇到CORS问题,可以直接在页面处理程序代码中检入handler configuration for static files或正确的标题。

答案 1 :(得分:1)

如果您遇到的问题是分割流量,您应该拦截所有请求并查找目标网址并相应地转移。但我认为您的问题实际上是访问部署在非默认版本上的端点。

您可以将特定端点部署到应用的特定(非默认)版本。

the official docs中所述:

  

要访问部署到应用程序的非默认App Engine版本的后端API版本,您必须在URL中包含版本说明符,如下所示:https://version-dot-your_app_id.appspot.com。例如,假设您的默认应用版本为1,但您希望访问部署到App Engine应用版本2的后端API版本;您将使用此网址:https://2-dot-your_app_id.appspot.com

答案 2 :(得分:1)

@Anhuin提出的答案对你的简单目的有好处。但是如果你想拥有完全独立的模块,我建议你使用subdomain mapping

为端点创建类似api.domain.com的子域,为常规前端模块创建web.domain.com。 在dipatch.xml中映射这些

<url>api.domain.com/*</url>
<module>endpointmod</module>

<url>web.domain.com/*</url>
<module>webmod</module>

我更喜欢这个,因为'_ah'在appstats,remote api等多个地方被appengine使用。通过调用子域,这对于在前端工作的人来说将更加清晰。