Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 如何在REST中的每个请求中嵌入版本协议号?_Web Services_Rest_Ios5_Soa_Restful Architecture - Fatal编程技术网

Web services 如何在REST中的每个请求中嵌入版本协议号?

Web services 如何在REST中的每个请求中嵌入版本协议号?,web-services,rest,ios5,soa,restful-architecture,Web Services,Rest,Ios5,Soa,Restful Architecture,在开发应用程序时,您的服务器和iPhone会不断发展,并不总是能够实现向后兼容。 我想在每个请求中添加一个协议版本号应该可以做到这一点(而不是,让我们假设为协议版本添加另一个web服务)。 Amazon在每个请求中都这样做(这里是一个示例): 因此,当应用程序对于当前协议来说太旧时,它会显示一条消息,阻止应用程序并要求用户进行更新。否则,使用旧应用程序的客户将看到一个不太好用的应用程序。那不好 我的问题是:如何在不干扰解析器、对象映射和实体映射的情况下将类似的版本控制模式实现到JSON应答中?有

在开发应用程序时,您的服务器和iPhone会不断发展,并不总是能够实现向后兼容。 我想在每个请求中添加一个协议版本号应该可以做到这一点(而不是,让我们假设为协议版本添加另一个web服务)。 Amazon在每个请求中都这样做(这里是一个示例): 因此,当应用程序对于当前协议来说太旧时,它会显示一条消息,阻止应用程序并要求用户进行更新。否则,使用旧应用程序的客户将看到一个不太好用的应用程序。那不好

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

可能还有另一种模式,比如在每个请求的标题中传递应用程序版本,如果出现错误,服务器会返回错误消息,比如(来自twitter): {“errors”:[{“message”:“抱歉,该页面不存在”,“code”:34}]}

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

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

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

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

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

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