1

在开发应用程序时,您的服务器和您的 iPhone 会不断发展,并不总是可以实现向后兼容。我想在每个请求中添加一个协议版本号应该可以解决问题(而不是说另一个协议版本的 Web 服务)。亚马逊在每个请求中都这样做(这里是一个示例): https ://forums.aws.amazon.com/message.jspa?messageID=269876 因此,当应用程序对于当前协议来说太旧时,它会显示一条消息阻止应用程序并要求用户进行更新。否则,使用旧应用程序的客户会看到运行不佳的应用程序。这不好。

我的问题是:如何在不干扰解析器、对象映射和实体映射的情况下在 JSON 回复中实现类似的版本控制模式?有什么建议吗?

也许还有另一种模式,例如在每个请求的标头中传递应用程序版本,如果出现错误,服务器会返回错误消息,例如(来自 twitter):{"errors":[{"message":"Sorry, that page doesn't存在","代码":34}]}

我想知道你是如何解决这个问题的。问候。

4

1 回答 1

0

您可以使用媒体类型对 API 进行版本控制。例如,如果您的媒体类型是application/vnd.ricardo+json并且您需要进行不向后兼容的更改,您将创建一个application/vnd.ricardo-v2+json媒体类型。

新版本的应用程序将Accept媒体application/vnd.ricardo-v2+json类型并获取新内容。旧版本的应用程序将继续Accept使用application/vnd.ricardo+json并且永远不会看到不兼容的更改。

当你想淘汰旧版本的应用程序时,只需有只接受application/vnd.ricardo+jsonreturn的请求406 Not Acceptable。然后,您可以在您的应用程序中使用它来触发逻辑以提示用户升级。

如果(无论出于何种原因)您需要允许该应用程序支持多个版本的服务器,您可以拥有它Accept application/vnd.ricardo-v2+json, application/vnd.ricardo+json; q=0.5application/vnd.ricardo-v2+json在这种情况下,如果可以,服务器将响应内容,application/vnd.ricardo+json否则。

您可以使用它来更好地控制新功能的“发布”。例如,您可以发布和更新应用程序,使用请求统计信息来确定何时有足够数量的用户升级。然后,您可以通过在服务器上翻转功能开关并同时进行营销工作来协调发布新功能。

于 2013-02-04T21:41:18.417 回答