使用Google云端点框架2.0和自定义域

时间:2018-05-14 22:31:10

标签: google-cloud-endpoints-v2 custom-domain

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

现在我尝试使用自定义域名[api.mydomain.app],在这里我已经完成了:

1-我已在我的appengine设置中添加了此域api.mydomain.app,现在已经过验证,并且具有由Google管理的有效SSL

2-我已在此域中添加了8条DNS记录(A& AAAA)" mydomain.app"在godaddy如下:

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类的定义

@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.

那你可以帮助我吗?我错过了什么吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我已将EndpointsServlet的url-pattern修改为:

   <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了。