Cloud Endpoints自定义域解决方法

Pix*_*ant 11 java google-app-engine google-cloud-endpoints

我们有一个AppEngine应用程序,我们希望与Google端点一起使用.我们需要支持Web客户端以及移动客户端,这使得Endpoints对我们很有吸引力,因为我们可以轻松生成Android和iOS客户端API.

问题是云端点当前不支持自定义域,因此我们的Web客户端无法直接与端点通信(移动客户端没有此问题).

这是我们已经尝试过的:

  • CORS请求从客户端到appspot.com域.这个问题是因为我们的请求不符合简单CORS(自定义标头,cookie等)的要求,每次请求都必须发送预检请求,这会减慢一切

  • 客户端向我们的自定义域发出请求,而自定义域又向appspot端点发出请求.同样,额外的请求对性能不利

  • 我们还尝试为Web客户端设置一个重复的Jersey REST API.我们对所有方法进行双重注释(一次针对Cloud Endpoints,一次针对Jersey),Web客户端访问Jersey API,移动客户端访问Endpoints API.这很好用,除了Jersey和Endpoints使用不同的例外.因此,如果我们想抛出一个404端点异常,那将会破坏Jersey响应,反之亦然.

还有其他选择吗?我们希望使用端点的强大功能来生成移动客户端,但也可以绕过Web客户端的自定义域限制.

Pix*_*ant 9

我们最终完全放弃了Cloud Endpoints,而是选择了纯粹的Jersey REST API.

为了满足我们为API生成移动客户端的需求,我们使用Swagger注释了我们的API .作为一个额外的好处,Swagger似乎支持比Cloud Endpoints更多的客户端生成,并且如果不直接支持目标语言,也可以相对容易地从模板设置自己的客户端生成.

Jersey + Swagger并不像Cloud Endpoints那样容易设置,但它更易于定制,并允许我们绕过Cloud Endpoints强加的自定义域限制.


Muk*_*h M 2

Google Cloud Endpoints 2.0 现在支持自定义域。如果您使用的是 Google Cloud Endpoints 1.0,则可以通过执行以下操作进行迁移:

  • 更新您的依赖项以使用新工件。在 Maven 中,这看起来像下面这样:

    com.google.endpoints 端点框架 2.0.0-beta.8

  • 删除旧依赖项,即 appengine-endpoints 工件。

  • 更新项目 web.xml 文件中的 API 入口点:

    • 将所有出现的 SystemServiceServlet 重命名为 EndpointsServlet。
    • 将所有出现的路径 /_ah/spi/* 替换为新的所需路径 /_ah/api/*

看:

https://cloud.google.com/appengine/docs/java/endpoints/migration

https://code.google.com/p/googleappengine/issues/detail?id=9384