Java 云端点自定义域解决方案
我们有一个AppEngine应用程序,我们希望与Google端点一起使用。我们需要支持web客户端和移动客户端,这正是端点吸引我们的原因,因为我们可以轻松生成Android和iOS客户端API 问题是,目前云端点存在问题,因此我们的web客户端无法直接与端点通信(移动客户端没有此问题) 以下是我们已经尝试过的: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等)的要求,因此必须随每个请求一起发送飞行前请求,这会降低速度
- 从客户端到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>