Parametry zapytania GET RestKit

Od jakiegoś czasu korzystam z RestKit 0.10.0 i do tego momentu publikowałem tylko obiekty zserializowane na moim serwerze:

[[RKObjectManager sharedManager] postObject:serializedObject
                                 usingBlock:^(RKObjectLoader *loader) {
                                     loader.delegate = self;
                                     loader.objectMapping = responseMapping;
                                     loader.serializationMIMEType = RKMIMETypeFormURLEncoded;
                                     loader.targetObject = nil;
                                 }];

Jak na razie dobrze. Ale teraz muszę wykonać żądanie GET do serwera z kilkoma parametrami zapytania. Pierwszą naturalną rzeczą, która przyszła mi na myśl, było zrobić to samo, co w przypadku wysyłania obiektów:

utwórz mapowanie serializacji dla obiektu otaczającego parametry zapytaniautworzyć mapowanie odpowiedzi dla obiektu odbieranego z serwerazdefiniuj i użyj routera dla RKRequestMethodGET (zamiast RKRequestMethodPOST)wykonaj żądanie za pomocą getObject: usingBlock (zamiast postObject: usingBlock)

Wkrótce dowiedziałem się, że to nie jest sposób, aby to zrobić, więc po przeszukaniu dostępnych zasobów (Wiki RestKit, Grupa Google RestKit) Teraz znam dwa rozwiązania uznane za ważne:

Dołączanie parametrów zapytania do ścieżki zasobu.

To działa doskonale.

NSDictionary *queryParams = [NSDictionary dictionaryWithObjectsAndKeys:
                                          token, @"accessToken",
                                          [NSNumber numberWithInt:level], @"level",
                                          [NSNumber numberWithInt:count], @"count",
                                          nil];

NSString* resourcePath = [PEER_SUGGESTIONS_CONTROLLER_PATH stringByAppendingQueryParameters:queryParams];

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:resourcePath
                                                usingBlock:^(RKObjectLoader *loader) {
                                                    loader.delegate = self;
                                                    loader.objectMapping = responseMapping;
                                                }];
Ustawianie parametrów zapytania w bloku ładowarki.

To nie wysyła parametrów zapytania.

RKParams *params = [RKParams params];
[params setValue:token forParam:@"accessToken"];
[params setValue:[NSNumber numberWithInt:level] forParam:@"level"];
[params setValue:[NSNumber numberWithInt:count] forParam:@"count"];

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:PEER_SUGGESTIONS_CONTROLLER_PATH
                                                usingBlock:^(RKObjectLoader *loader) {
                                                    loader.delegate = self;
                                                    loader.objectMapping = responseMapping;
                                                    loader.params = params;
                                                }];

Moje pytania to:

Dlaczego drugie rozwiązanie nie działa?Dlaczego pierwsze rozwiązanie działa bez konieczności ustawiania loader.targetObject na zero, chociaż nie mam żadnej ścieżki klucza głównego w odpowiedzi JSON?Jakie są przypadki, w których powinienem użyć metody getObject: usingBlock? Jaki jest jego zamierzony cel?Do czego powinienem użyć loader.params? Samouczek mapowania obiektów zwiki mówi, że ta właściwość może być używana do hermetyzacji parametrów POST, ale nie widzę punktu, ponieważ mogę zawinąć parametry w serializowanym obiekcie, który jest wysyłany za pomocą metody postObject: usingBlock.

Dzięki.

[PÓŹNIEJ EDYCJA]

Jeśli chodzi o odpowiedź na moje drugie pytanie: ustawiałem targetObject na nil w bloku loader podczas wykonywania żądań POST, ponieważ w przeciwnym razie RestKit spróbuje użyć odwzorowania obiektu wysyłania dla odpowiedzi (sprawdź topołączyć do pokrewnej dyskusji). Ale ponieważ używam loadObjectsAtResourcePath: usingBlock :, nie jest wysyłany żaden obiekt, dlatego odpowiedź będzie naturalnie mapować mapowanie odpowiedzi bez konieczności ustawiania obiektu docelowego na zero.

questionAnswers(2)

yourAnswerToTheQuestion