我有一个 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/