使用 RestKit 同时调用两个 web 服务
Posted
技术标签:
【中文标题】使用 RestKit 同时调用两个 web 服务【英文标题】:Calling two webservices at the same time using RestKit 【发布时间】:2014-06-23 12:32:52 【问题描述】:您好,我是第一次使用 Restkit 并且能够正确调用 Web 服务,但是有一种情况是我必须在我的一个视图控制器上调用两个 Web 服务才能从服务器获取所需的所有数据 例如:我有一项服务提供 userProfile 数据,第二项服务我必须调用 userLevelType
现在我正在调用第一个 web 服务,当我获得该数据时它给了我 useprofile 我正在调用第二个 web 服务 userLevelType 但我想同时调用这两个服务
有什么方法可以实现一次调用两个不同的web服务。
我正在使用 RKobjectRequestOperation 来调用 web 服务,所以是否可以创建队列或其他一些我不知道的解决方案
感谢您的帮助。
【问题讨论】:
RestKit 已经有一个队列。显示您当前如何执行请求操作的代码。 【参考方案1】:您正在处理一个异步系统,该系统正在访问基于网络的资源。 “同时”几乎是不可能的。
RestKit
将按照您给它们的顺序排列请求。
如果您的请求是顺序相关的,您需要像这样通过完成块将它们链接在一起。
RequestOperationSucessBlock successblock = ^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
[self runNextRequestWhichIsDependantOnDataFromThisRequest];
;
RequestOperationFailBlock failureblock = ^(RKObjectRequestOperation *operation, NSError *error)
//deal with failure
;
[[RKObjectManager sharedManager] getObjectsAtPath:@"my/path" parameters:someParams success:successblock failure:failureblock];
如果它们不依赖,请在两个成功块中使用条件来继续您的流程。
RequestOperationSucessBlock successblock = ^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
if(theOtherOperationHasCompleted)
[self carryOnWithFlowNowThatBothOperationsAreDone];
;
【讨论】:
这不是真的。计算机一直在执行多项任务。 OP 也直接使用 RK 操作,而不是使用对象管理器。 True ,ios 执行多任务。但是同时接收到两个独立的网络回叫的可能性很小。 OP不应该依赖这种情况。实际上会得到 0 到 2 个响应。 更好地描述为:请求可以同时运行而不是顺序运行,但不要依赖于每个请求何时完成的任何事情。 RestKit 不会按照请求的顺序将请求排队以完成(除非您将其配置为)。【参考方案2】:使用对象管理器来控制您处理的请求操作。使用enqueueObjectRequestOperation:
将处理传递给对象管理器。访问对象管理器的operationQueue
,这样您就可以调用setMaxConcurrentOperationCount:
来限制正在运行的并发进程的数量(实际上任何时候都不应该超过4 或5 个)。
【讨论】:
以上是关于使用 RestKit 同时调用两个 web 服务的主要内容,如果未能解决你的问题,请参考以下文章
Restkit + Objective-c - 多次调用同一个 Web 服务
服务器未从 restkit 的 web 服务调用接收正文对象
通过 NSURLconnection 为 ios Web 服务使用 Web 服务库(RESTKIT/ASIHTTP 请求)的优点