1

我正在尝试设置 RKRoute 以使用 RestKit 从 Dropbox API 获取文件夹内容。

获取内容的 URL 是https://api.dropbox.com/1/metadata/dropbox/<path>.

所以我设置了这样的响应和路由:

// objectManagers baseURL is @"https://api.dropbox.com/1/"
RKResponseDescriptor *rootResponse = [RKResponseDescriptor responseDescriptorWithMapping:dynamicMapping pathPattern:@"metadata/dropbox:path" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[objectManager.router.routeSet addRoute:[RKRoute routeWithClass:[DropboxFolder class] pathPattern:@"metadata/dropbox:path" method:RKRequestMethodGET]];
// dropboxFolder.path is @"/" for root
// dropboxFolder.path is @"/Images" for the "Images"-folder contained in root

但是随后路径匹配失败,[RKPathMather matchesPath:tokenizeQueryStrings:parsedArguments:因为斜杠的数量被检查如下:RKNumberOfSlashesInString(self.patternString) == RKNumberOfSlashesInString(self.rootPath)

当我注释掉这个检查时,映射是有效的,但我确信在其他一些情况下需要它。

4

2 回答 2

1

正确的方法是使用 2 个不同的响应描述符和路由。斜线对于允许 RestKit 正确区分不同的 URL、路径和模式很重要。您可以使用相同的映射,因此它“只是”另外几行配置。

于 2013-05-22T15:02:02.730 回答
1

我想我为我的问题找到了一个更清洁的解决方案:

我像这样配置了我的响应描述符和路由:

RKResponseDescriptor *rootResponse = [RKResponseDescriptor responseDescriptorWithMapping:dynamicMapping pathPattern:@"metadata/dropbox/:path" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
RKRoute *route = [RKRoute routeWithClass:[DropboxFolder class] pathPattern:@"metadata/dropbox/:path" method:RKRequestMethodGET];
route.shouldEscapePath = YES;
[objectManager.router.routeSet addRoute:route];

现在它适用于 1 个响应描述符和 1 个路由。我不知道这是否适用于使用路径的其他 API,但它适用于 Dropbox。(root 的 URL 现在是https://api.dropbox.com/1/metadata/dropbox/%2F

于 2013-05-22T19:37:21.697 回答