java - 在需要新的 API 版本之前,我可以对云端点(应用程序引擎)返回对象进行哪些更改? (以及如何做到的)

标签 java android google-app-engine rest google-cloud-endpoints

我有一个 App-Engine 服务端点,它返回一个由许多不同类型的字段组成的 POJO 对象。使用相应端点库构建的 Android 客户端可以很好地接受这一点。

如果我添加新字段到该对象定义的末尾并开始从App-Engine服务器返回该扩展对象,旧的Android客户端是否会接受这个并且只是忽略多余的,否则他们会呕吐吗?

我看到提到了对 API 的不同“版本”的支持,如果我无法扩展返回对象,这似乎是必需的,但是很难找到有关如何编写此内容的信息。有什么指点吗?

或者,也许更简单...向 REST 调用返回与以前的服务器版本不同的信息并且仍然向后兼容旧客户端的最佳方法是什么?类似于 Objectify -for-Endpoints 将是完美的。

最佳答案

如果您所做的唯一更改是累加性的,则先前生成的客户端应该可以继续正常工作。我刚刚测试了后端和 Android 客户端,当我向 POJO 添加字段而不更新客户端时,它们的行为正确。

有一个有点帮助的 table文档中提供了有关何时应该增加 API 版本的一些指导。

相关位:

  • When you want to introduce an incremental, but non-breaking change, keep the API version constant and deploy over the existing API.
  • When you introduce a breaking change to your API, increment the API version.

向 POJO 添加字段应该被视为增量、非破坏性更改。如果您更改字段的名称或类型,您可能需要增加 API 版本。

托管多个 API/App Engine 版本

API 只是带有注释的类,因此如果您想添加新的 API 版本,只需添加一个新类并在注释中指定不同的版本号即可。您可以在设计类时自由地使用继承(请参阅 Multiclass APIs )。

如果您保持 App Engine 版本不变(或始终引用默认版本),则客户端唯一需要更改的是您正在访问的 API 版本。客户端库构建在版本号中,因此,如果您为 API 的 v1 生成了客户端库,它将始终访问 API 的 v1 ,除非您修改源代码。如果您对 API 的 v1 进行附加更改,v1 的客户端库应继续工作(如上所述)。

如果您同时修改 App Engine 版本和 API 版本,事情会变得有点棘手。您可以在应用程序的不同 (App Engine) 版本上托管不同的 API v1。默认情况下,客户端库将指向 App Engine default 版本,但您可以通过将根 URL 更改为指向特定版本(例如 https://1-dot-myapp.appspot.com)。

我的建议是始终让发送给客户的代码指向您的默认 App Engine 版本(主要的异常(exception)是您的应用有一些可以轻松更新的测试版)。如果您增加 App Engine 版本,请确保将您希望支持的所有 API 版本包含到该部署中。

关于java - 在需要新的 API 版本之前,我可以对云端点(应用程序引擎)返回对象进行哪些更改? (以及如何做到的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20111448/

相关文章:

java - 在NoSQL系统中,例如每个Lesson有很多Exercise,在插入Exercise之前我们需要检查Lesson是否存在两次吗?

java - 当方法仍在 GWT 中运行时如何在 UI 上启用交互

android - 找不到变量:在构建时 react

Android Studio 不显示所有构建变体

java - Google App Engine-如何改善冷启动JVM时间?

google-app-engine - 如何在应用引擎上使用 Go 获取 youtube 播放列表视频

java - 使用按方法/字段访问规范的理由是什么?

java - 我的 listView 中的项目没有正确对齐?

java - Swagger 必需参数缺失时返回 500,而不是 404

Android 标准 ListView 项目不会在长文本上放大