大多数RESTful API会路由访问资源,例如Rabbit对象,如下所示:
GET /rabbits <--- GET all rabbits. HTTP GET
GET /rabbits/:rabbit_id <--- GET one rabbit. Also HTTP GET
POST /rabbits
PUT /rabbit/:rabbit_id
但是,RestKit不允许我有两个具有相同HTTP动词的路由,因此无法将两个GET路由添加到RKObjectManager的RouteSet:
[manager.router.routeSet addRoute:[RKRoute routeWithClass:[Rabbit class]
pathPattern:@"rabbits"
method:RKRequestMethodGET]];
[manager.router.routeSet addRoute:[RKRoute routeWithClass:[Rabbit class]
pathPattern:@"rabbits/:rabbitID"
method:RKRequestMethodGET]];
//BOOM! Assertion failure
这导致断言失败:“无法添加与现有路线具有相同类别和方法的路线。”
为什么我不能添加具有相同类和方法的路由? 路径不同。我怎么能得到兔子的列表以及ID的单个兔子?我知道几种解决方法,但我觉得这不是我应该解决的问题。
答案 0 :(得分:6)
如果您使用命名路线,则可以执行此操作。您不能使用非命名路由,因为它会产生一个RestKit应该使用的歧义。
答案 1 :(得分:3)
对象类路线设计用于实例。执行GET
时会使用getObject:someObject path:nil parameters:nil success:nil failure:nil
路线。
集合加载通常通过命名路由或路径完成。
答案 2 :(得分:0)
如果它可以帮助任何人使用代码,那么下面是如何使用名称设置路径。
// When you are setting up your mapping, set up Route with Name.
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:userMapping
method:RKRequestMethodGET
pathPattern:LOGIN_URL
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[[RKObjectManager sharedManager].router.routeSet addRoute:[RKRoute routeWithName:LOGIN_ROUTE pathPattern:LOGIN_URL method:RKRequestMethodGET]];
[[RKObjectManager sharedManager] addResponseDescriptor:responseDescriptor];
// And when you are ready to make the http call, do the following
[[RKObjectManager sharedManager] getObjectsAtPathForRouteNamed:LOGIN_ROUTE
object:userProfile
parameters:params
success:success
failure:failure];