同一个Appengine版本中的多个Google Cloud Endpoint API版本

时间:2016-08-30 13:06:46

标签: android google-app-engine

我在alpha阶段有一个Android应用程序,我正在测试如何管理服务器和客户端的更新..

首次向用户发布。我的android正在使用来自这个基础的生成的类

class and deployed to the default Appengine version.
@Api(name = "myAPIName", version = "v1
public class AbstractEndpoint<T>{
}

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
   <application>myapp</application>
   <module>default</module>
   <version>1</version>
</appengine-web-app>

第二次发布 我将Api版本从V1增加到V2,并在我的第二个应用程序版本中使用生成的类。我将后端部署到相同的默认appengine版本1。

@Api(name = "myAPIName", version = "v2
public class AbstractEndpoint<T>{
}

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
   <application>myapp</application>
   <module>default</module>
   <version>1</version>
</appengine-web-app>

问题是在升级之后,只有使用v2的后一个客户端应用程序才会出现Appengine端点v2,而那些使用V1的客户端应用程序无法再访问api v1。 V2覆盖V1或其他东西,或者v1和V2都无法在相同的Appengine实例或其他内容中运行..

尝试梳理文档,并堆叠溢出以获取线索,但没有太大成功。

1 个答案:

答案 0 :(得分:0)

通过将版本号提升到v2,端点不再知道任何v1,因为它不会在您的项目中出现,并且可能会造成混乱。

除非您不再支持v1(您显然是这样),否则您将避免仅增加版本。

理想情况下,您可以使用API​​版本控制的变体,因为您希望并排支持两个用户(v1和v2)。

以下是您可以使用的方法。

第一个示例演示了一种版本控制形式,其中API(可能)的v2与v1没有任何共同之处:

@Api(name="myAPIName", version="v1")
class MyAPI1 {
    ...
}

@Api(name="myAPIName", version="v2")
class MyAPI2 {
    ...
}

或此示例,其中API的v2以某种方式扩展v1:

@Api(name="myAPIName", version="v1")
class MyAPI1 {
    ...
}

@Api(version="v2")
class MyAPI2 extends MyAPI1 {
    ...
}

这样,您的API的两个版本都将存在于相应版本的应用引擎项目中。