2012-01-31 2 views
4

У меня есть чистый RESTful API, который предоставляет мне со следующими конечными точкамизапроса Howto вложенных ресурсов с использованием RESTkit для Objective-C

/поставщиками
/поставщиками /: ID/страны
/поставщики /: ID/стран /: id/cities

Я неопытен, когда дело доходит до Objective-C и RESTkit. Как раз в тот момент, когда я ищу способ сопоставить объекты на стороне сервера с 3 классами на стороне клиента: поставщиком, страной, городом.

Так что я бы ожидать декларации для каждого класса,

а) определяет конечную точку, где объекты JSON может быть извлечен
б) определяет 1: N отношения от поставщика к стране и от страны к городу ,

После этого, я бы ожидать, чтобы быть в состоянии сделать что-то вроде этого [псевдокоде]:

vendors = Vendors.all //retrieve all vendors and construct objects 
countries = vendors[0].countries //retrieve all countries of the first vendor 
city = countries.last.cities //retrieve the cities of the last countries 

К сожалению, я не вижу что-то подобное в RESTkit. Чтобы иметь возможность создавать отношения между объектами, API должен будет поставлять вложенные ресурсы! Например, вызов конечной точке страны должен будет предоставить связанный с этим объект поставщика непосредственно в странах JSON?!?

Это то, что я совсем не понимаю. В этом случае я бы использовал все виды устаревшего протокола и не должен был использовать RESTful API.

Я что-то упускаю? Может ли кто-нибудь помочь в этой теме или предоставить ссылку на ресурс, объясняющий RESTkit более подробно, чем документы?

ответ

-2

Ответ на ваш вопрос: да, вы можете определить отношения, используя RestKit, и представление JSON должно быть вложенным, читать вперед, чтобы увидеть пример этого и как его сопоставить на ваших объектах.

Вы должны следовать этим шагам:

  1. Создайте объекты, используя свойства, которые вы получаете от API.

  2. Вам необходимо установить сопоставления, связанные с каждым из ваших объектов и JSON/XML, которые вы получаете из API.

  3. Определите отображения между вашими объектами, если объектом объекта является другой объект.

От Object Mapping Documentation:

нужно разобрать следующий JSON:

{ "articles": [ 
    { "title": "RestKit Object Mapping Intro", 
     "body": "This article details how to use RestKit object mapping...", 
     "author": { 
      "name": "Blake Watters", 
      "email": "[email protected]" 
     }, 
     "publication_date": "7/4/2011" 
    }] 
} 

Определите объекты в Objective-C:

//author.h 
@interface Author : NSObject 
    @property (nonatomic, retain) NSString* name; 
    @property (nonatomic, retain) NSString* email; 
@end 

//article.h 
@interface Article : NSObject 
    @property (nonatomic, retain) NSString* title; 
    @property (nonatomic, retain) NSString* body; 
    @property (nonatomic, retain) Author* author; //Here we use the author object! 
    @property (nonatomic, retain) NSDate* publicationDate; 
@end 

Установите отображения:

// Create our new Author mapping 
RKObjectMapping* authorMapping = [RKObjectMapping mappingForClass:[Author class]]; 
// NOTE: When your source and destination key paths are symmetrical, you can use mapAttributes: as a shortcut 
[authorMapping mapAttributes:@"name", @"email", nil]; 

// Now configure the Article mapping 
RKObjectMapping* articleMapping = [RKObjectMapping mappingForClass:[Article class]]; 
[articleMapping mapKeyPath:@"title" toAttribute:@"title"]; 
[articleMapping mapKeyPath:@"body" toAttribute:@"body"]; 
[articleMapping mapKeyPath:@"author" toAttribute:@"author"]; 
[articleMapping mapKeyPath:@"publication_date" toAttribute:@"publicationDate"]; 

// Define the relationship mapping 
[articleMapping mapKeyPath:@"author" toRelationship:@"author" withMapping:authorMapping]; 

[[RKObjectManager sharedManager].mappingProvider setMapping:articleMapping forKeyPath:@"articles"]; 

Надеюсь, это может быть полезно для вас!

+1

Вопрос был о доставке из вложенных ресурсов, не о картировании. –

0

В документации RestKit имеется раздел: Сопоставление без KVC, которое охватывает это.

RKPathMatcher: Путь согласовань оценивает шаблоны URL, чтобы произвести матчей с узорами, такие как «/ статьи /: ArticleID», который будет матча против «/ статей/1234» или «/ статей/некоторого-пра- статья'.

https://github.com/RestKit/RestKit/wiki/Object-mapping#mapping-without-kvc

Примечание: Я не пробовал еще, но документ, кажется, обновлены для последней версии RestKit (0.20.0)

Смежные вопросы