Web 服务 - 在 REST 中的每个请求中嵌入版本协议号的方法



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

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

也许还有另一种模式,例如在每个请求的标头中传递应用程序版本,如果错误,服务器将返回错误消息,例如(来自 twitter):{"错误":[{"消息":"抱歉,该页面不存在","代码":34}]}

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

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

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

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

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

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

最新更新