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

Java 在需要新的API版本之前,我可以对云端点(应用程序引擎)返回对象进行哪些更改?(这是如何做到的),java,android,google-app-engine,rest,google-cloud-endpoints,Java,Android,Google App Engine,Rest,Google Cloud Endpoints,我有一个appengine服务端点,它返回一个由许多不同类型的字段组成的POJO对象。Android客户端使用相应的端点libs构建,可以很好地接受这一点 如果我在这个对象定义的末尾添加新字段,并开始从appengine服务器返回扩展对象,老的Android客户端会接受这一点并忽略额外的字段,还是会呕吐 我看到有人提到支持不同的API“版本”,如果我不能扩展我的返回对象,这似乎是必需的,但是关于如何编写它的信息很难找到。有什么建议吗 或者,更简单地说,与以前的服务器版本相比,向REST调用返回不

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

如果我在这个对象定义的末尾添加新字段,并开始从appengine服务器返回扩展对象,老的Android客户端会接受这一点并忽略额外的字段,还是会呕吐

我看到有人提到支持不同的API“版本”,如果我不能扩展我的返回对象,这似乎是必需的,但是关于如何编写它的信息很难找到。有什么建议吗


或者,更简单地说,与以前的服务器版本相比,向REST调用返回不同信息并仍然与旧客户端向后兼容的最佳方法是什么?类似于端点的东西将是完美的。

< P>如果你想一直走下去,创建一个完全灵活的界面,那么考虑返回一个字符串集合,其中每个字符串都是JSONED对象。这意味着您可以自己编写JSON,而不是让端点来编写,但这很简单


[稍后编辑]只是为了完整性的更正。简单地返回字符串集合()有一个问题。相反,创建一个包装集合并返回它的类。

如果您想一路遍历并创建一个完全灵活的接口,那么考虑返回一个字符串集合,其中每个字符串都是JSONED对象。这意味着您可以自己编写JSON,而不是让端点来编写,但这很简单


[稍后编辑]只是为了完整性的更正。简单地返回字符串集合()有一个问题。相反,创建一个封装集合的类并返回该类。

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

文档中提供了一些有用的信息,为您何时应该增加API版本提供了一些指导

相关位:

  • 当您希望引入增量但不中断的更改时,请保持API版本不变,并在现有API上部署
  • 当您对API引入突破性的更改时,请增加API版本
向POJO中添加字段应符合增量、非中断更改的条件。如果更改字段的名称或类型,则可能需要增加API版本

托管多个API/应用程序引擎版本

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

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

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


我的建议是,发送给客户的代码始终指向您的
默认
应用程序引擎版本(主要的例外情况是,如果您的应用程序有一些狗粮版本,可以轻松更新)。如果您增加应用程序引擎版本,请确保将您希望支持的所有API版本包括到该部署中。

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

文档中提供了一些有用的信息,为您何时应该增加API版本提供了一些指导

相关位:

  • 当您希望引入增量但不中断的更改时,请保持API版本不变,并在现有API上部署
  • 当您对API引入突破性的更改时,请增加API版本
向POJO中添加字段应符合增量、非中断更改的条件。如果更改字段的名称或类型,则可能需要增加API版本

托管多个API/应用程序引擎版本

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

如果您保持应用程序引擎版本不变(或始终参考
默认版本),那么客户端唯一需要更改的就是您正在访问的API的版本。客户端库是在版本号中生成的,因此如果您为API的
v1
生成了客户端库,除非您修改源代码,否则它将始终访问API的
v1
。如果对
v进行附加更改