场景:我在市场上运行版本代码5的Android应用程序,使用Google Cloud Endpoints和Objectify调用App Engine版本2(默认)。我需要对App Engine后端的Android应用程序进行更改。
问题:新版本的Android应用程序(版本6)无法与App Engine的旧版本2一起使用,因为返回的数据会有所不同。我的Android应用程序的用户将慢慢开始更新到新版本,需要使用旧版和新版App Engine后端。
问题:旧版Android应用程序是否可以调用旧版App Engine,而较新版本的Android应用程序会调用较新版本的App Engine。 Android客户端是否可以检查其版本并分别更改请求,或者App Engine是否可以检查请求并将其指向正确的版本?或者我是否有另一种方法可以解决这种情况?
Android应用仅在alpha测试中使用< 20个用户,所以如果我把旧版本从调试中删除,直到所有用户都更新,这不是有害的。虽然为未来的更新提供解决方案并不会暂时使应用程序无法使用会很好。也许我可以定制我的代码来处理这些情况。洗耳恭听。感谢
答案 0 :(得分:2)
与客户端代码相比,更容易更新服务器代码 。迁移API时,通常希望服务器同时使用两种API版本,直到您可以升级大部分客户端。根据您的受众情况,这可能需要数月时间。
根据服务器响应构建强制升级到客户端的能力是个好主意。
您通常不希望同时运行许多版本的服务器代码。数据迁移很快就无法管理。一次处理单个服务器端版本转换。
答案 1 :(得分:1)
感谢您的建议。
事实证明,我并不完全理解后端API版本和App Engine实例版本之间的区别。在重新阅读文档几次并结合SO寻找线索之后,我遇到了this与this github问题相关的回答。
现在这个数字更有意义了。
通过在Endpoint类注释中增加Endpoint API版本然后重建客户端库,Android客户端(新版本)然后调用新的API版本。同时,运行旧API版本的所有现有Android客户端仍然可以调用较旧的后端API版本。增加App Engine版本是管理这些API推出的一种方法。
答案 2 :(得分:0)
特别是对于提供端点后端的GAE应用程序,端点API版本控制的设计完全是为了处理您提到的迁移。您可能需要浏览Deploying to multiple app versions。
通常(在端点之外),可以基于GAE自动routing via URL实现优雅的客户端升级故事,该故事允许到达运行模块代码的特定版本的模块实例(如果可用的):
https://version-dot-module-dot-app-id.appspot.com http://version.module.app-id.my-custom-domain.com
将请求发送到指定模块和版本的可用实例。