将 Google 云端点框架 2.0 与自定义域一起使用

using Google cloud endpoint framework 2.0 with custom domain

我在 App engine standard environment 使用 Cloud endpoint framework 2.0 托管移动后端(用 Java 编写),我可以通过此 URL https://api-dot-[projectId]-appspot.com/_ah/api/myApi/v1/path

现在我正在尝试使用自定义域 [api.mydomain.app],这里是我所做的:

1- 我已经在我的应用程序引擎设置中添加了这个域 api.mydomain.app 并且它现在已经过验证并且具有由 google

管理的有效 SSL

2- 我在 godaddy 的这个域 "mydomain.app" 中添加了 8 条 DNS 记录(A 和 AAAA),如下所示:

A   api xxxxxxx
A   api xxxxxxx
A   api xxxxxxx
A   api xxxxxxx

AAAA    api xxxxxxx
AAAA    api xxxxxxx
AAAA    api xxxxxxx
AAAA    api xxxxxxx

我对 @(对于默认服务)和 admin(对于管理服务)有相同的记录,两者都工作正常 我也有这个记录 CNAME * ghs.googlehosted.com

3- 我在下面的 dispatch.xml 中添加了这些记录:

  <dispatch>
       <!-- Send all Mobile traffic to the API. -->
      <url>api.mydomain.app/*</url>     
      <module>api</module>
  </dispatch>   

 <dispatch>
      <!-- Send all Admin traffic to the Admin Platform. -->
      <url>admin.harmonica.app/*</url>
      <module>admin</module>
  </dispatch> 

4- 此后端的模块名称在 appengine-web.xml 中定义为 api

5-这是我的定义 API class

@Api(name = "myApi", version = "v1", authenticators = { Authenticator.class },
        // scopes = { Constants.EMAIL_SCOPE },
        clientIds = { Constants.WEB_CLIENT_ID,
                Constants.ANDROID_CLIENT_ID }, description = "API for Harmonica Backend application.")
public class MyApi {...}

6- 这就是我在 web.xml

中定义 EndpointsServlet 的方式
<servlet-mapping>
  <servlet-name>EndpointsServlet</servlet-name>
  <url-pattern>/_ah/api/*</url-pattern>
 </servlet-mapping>

所以在我尝试访问 https://api.mydomain.app/myApi/v1/pathhttps://api.mydomain.app/path 时,做完所有这些之后 它向我展示了这个回复:

Error: Not Found
The requested URL /dating was not found on this server.

我在服务器日志中看到了这个 No handlers matched this URL.

所以你能帮帮我吗?我错过了什么吗?

提前致谢!

我已将 EndpointsServlet 的 url 模式修改为:

   <servlet-mapping>
      <servlet-name>EndpointsServlet</servlet-name>
    <!--   This is for accessing the API by the domain name -->
      <url-pattern>/*</url-pattern>  
    <!--   This is for the backward compatibility -->
      <url-pattern>/_ah/api/*</url-pattern>
   </servlet-mapping>

现在我可以从我的自定义域访问我的 API。