使用 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 api目标c调用Web服务时出错

Restkit + Objective-c - 多次调用同一个 Web 服务

服务器未从 restkit 的 web 服务调用接收正文对象

通过 NSURLconnection 为 ios Web 服务使用 Web 服务库(RESTKIT/ASIHTTP 请求)的优点

不同的 web 服务调用不同的视图控制器 Restkit

ASIHttpRequest 调用 Restful Web 服务?