Каков наилучший подход для создания клиента iphone для приложения rails?

У меня есть довольно стандартное приложение rails и вы хотели бы иметь доступ к основным операциям CRUD (Create, Update, Delete), а также к запросам, которые я добавил, из приложения iPhone. Rails предоставляет REST API для этих операций более или менее из коробки.

Каков наилучший подход к работе с частью REST/XML на iphone, и есть ли хорошие библиотеки objective-C, которые уже делают это? Операции также должны быть связаны с конкретным пользователем (то есть аутентифицированы).

Ответ 1

Это обычная проблема для меня, настолько, что я работал над портом Rails ActiveResource framework под названием ObjectiveResource,

До сих пор у нас было два релиза проекта. 1.0 уже используется несколькими приложениями в App Store и может обрабатывать обработку ресурсов по умолчанию to_xml и to_json, встроенную в Rails. 1.01 является выпуском исправления ошибок и снижением обновления.

В настоящее время мы работаем над определением набора функций для 1.1. Мы уже имеем немало идей и обсуждаем больше о список рассылки.

Ответ 2

Мне повезло с использованием plists...

Вам понадобится установить жемчужину plist-3.0.0 (плагин для установки gem IIRC)

Затем в вашем контроллере вы настроите что-то вроде этого:

plist = {'a'  => 'b', 'c' => 'd', 'e' => {'f' => 'g', 'h' => {'i' => 'j'}}}.to_plist
render(:text => plist)

Затем в вашем приложении iphone установите что-то вроде этого:

NSURL *url = [NSURL URLWithString:@"http://somewhere.com"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLResponse *response;
NSError *error;
NSData *plistData;
plistData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSPropertyListFormat format;
NSString *errorStr;
id imagesToRate = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&errorStr];
if(!imagesToRate) {
    NSLog(errorStr);
} else {
    NSLog(@"%@", [imagesToRate objectForKey:@"e"]);
}

Вы в значительной степени получаете всю свободу использования json (например, вам не нужно сворачивать свою собственную XML-схему для форматирования ваших данных, а сериализация так же просто, как вызов to_plist) плюс, sdk поставляется с родным код для обработки пластин.

Но если у вас все готово веб-сервис, который выводится в json/xml, вы можете захотеть сохранить это и просто проанализировать материал на iphone, используя уже упомянутый материал (TouchXML, json-framework)

Ответ 3

Лучше всего написать простой класс-оболочку вокруг NSURLConnection, который настраивает конкретный материал для вашего API. Это не особенно сложно, и позволяет вам адаптировать ваш API класса непосредственно к API REST, на который вы нацеливаете. У вашего класса может быть метод init, например initWithMethod:delegate:params:, где делегат является объектом, который хочет получить результат асинхронно, а params является NSDictionary всех параметров. Вы также можете использовать свойство класса для настройки аутентификации (или открыть класс и записать его после входа в систему).

Что касается анализа XML, я бы рекомендовал проверить TouchXML.

Ответ 4

Если вам не нравится синтаксический анализ XML (и кто это делает?) и может настроить бэкэнд для вышивания JSON вместо XML, я настоятельно рекомендую использовать библиотеку, такую ​​как json-framework. Намного проще просто читать данные в объектах, чем анализировать через узлы XML.

Ответ 5

Недавно я собрал пример TouchJSON, который использует NSURLConnection. Это очень просто, но должно быть достаточно, чтобы вы начали с айш-загрузки.

http://github.com/twoism/touchjsonexample/tree/master

Ответ 6

Будьте осторожны, используя NSURLConnection на iPhone. Известно, что есть утечки памяти, которые могут привести к краху приложения очень быстро. Если вы выполняете множество HTTP-запросов, не ожидайте, что NSURLConnection будет работать на вас. Найдите что-то еще, возможно, какую-нибудь обертку для скручивания.