2

ほとんどの 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 動詞で 2 つのルートを持つことができないため、RKObjectManager の RouteSet に 2 つの GET ルートを追加することはできません。

[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 で取得するにはどうすればよいですか? 私はいくつかの回避策を知っていますが、これは回避する必要があるものではないと感じています。

4

3 に答える 3

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];
于 2014-04-10T18:21:22.580 に答える