Java 云端点自定义域解决方案

Java 云端点自定义域解决方案,java,google-app-engine,google-cloud-endpoints,Java,Google App Engine,Google Cloud Endpoints,我们有一个AppEngine应用程序,我们希望与Google端点一起使用。我们需要支持web客户端和移动客户端,这正是端点吸引我们的原因,因为我们可以轻松生成Android和iOS客户端API 问题是,目前云端点存在问题,因此我们的web客户端无法直接与端点通信(移动客户端没有此问题) 以下是我们已经尝试过的: 从客户端到appspot.com域的CORS请求。这方面的问题是,由于我们的请求不符合简单COR(自定义标头、cookie等)的要求,因此必须随每个请求一起发送飞行前请求,这会降低速度

我们有一个AppEngine应用程序,我们希望与Google端点一起使用。我们需要支持web客户端和移动客户端,这正是端点吸引我们的原因,因为我们可以轻松生成Android和iOS客户端API

问题是,目前云端点存在问题,因此我们的web客户端无法直接与端点通信(移动客户端没有此问题)

以下是我们已经尝试过的:

  • 从客户端到appspot.com域的CORS请求。这方面的问题是,由于我们的请求不符合简单COR(自定义标头、cookie等)的要求,因此必须随每个请求一起发送飞行前请求,这会降低速度

  • 客户端向自定义域发出请求,而自定义域又向appspot端点发出请求。同样,额外的请求对性能没有好处

  • 我们还尝试为web客户端设置一个重复的Jersey REST API。我们对所有方法进行双重注释(一次用于云端点,一次用于Jersey),web客户端访问Jersey API,移动客户端访问Endpoints API。除了Jersey和Endpoints使用不同的异常之外,这工作得非常好。因此,如果我们想抛出一个404端点异常,它将扰乱Jersey响应,反之亦然


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

我们最终完全放弃了云端点,转而使用了纯Jersey REST API

为了满足我们为API生成移动客户端的需要,我们用注释对API进行了注释。作为额外的好处,Swagger似乎比云端点支持更多的客户端生成,并且如果您的目标语言不受直接支持,则可以相对轻松地从模板设置您自己的客户端生成


Jersey+Swagger不像云端点那么容易设置,但它更易于定制,允许我们绕过云端点施加的自定义域限制。

最简单的解决方案是使用反向代理。 例如,如果您的应用程序是,请在上创建简单的html页面并重定向到使用javascript

上的Index.html


windows.location=http://myapp.appspot.com;

它还有一个优势:如果您将代理页面放在另一个主机(而不是appspot.com)上,您的应用程序()将可以从中国访问。

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

  • 更新依赖项以使用新工件。在Maven中,这看起来 如下所示:

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

  • 删除遗留依赖项,即appengine端点工件

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

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


这似乎仍然是一个问题。如果你想跟随开发者的抱怨进入真空,你可以启动它。请不要在多个问题中添加。回答最好的一个,并将其余的标记为重复项。看见
<html>
   <head>
      <script>
          windows.location = http://myapp.appspot.com;
      </script> 
  </head>
  <body></body>
</html>